Android中布局的巧妙设计【android进化二十六】

原文地址:http://blog.csdn.net/wdaming1986/article/details/6818507


   我学android以来,感觉控件都不可以重叠一起的,比如不可以在一个EditText中再放一个TextView,感觉控件都是有位置的,不可以重叠。但是这周看Android短信源码的时候发现控件其实是可以重叠放在一起的,这说明谷歌设计Android语言的时候就考虑到了这点,所以设计师很巧妙的就实现了这个功能。例如可以在一个TextView中环绕一个图片,在EditText中放置一个TextView,我就写了一个EditViewDemo的例子,在EditText的右下角放置一个TextView,显示还能输入的字数,一共能输入160个字。大家有问题的或者想要源码的可以留言。

 

                       程序一开始的效果:                                            当输入一个字母TextView显示剩余数:

                                                      

 

                             输入多个字母时候的效果:

                       

 

代码奉上,一切还得看代码说真理:

一、mainActivity。java类中的代码:

  1. package com.cn.daming;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.AlertDialog;  
  5. import android.os.Bundle;  
  6. import android.text.Editable;  
  7. import android.text.TextWatcher;  
  8. import android.view.View;  
  9. import android.widget.EditText;  
  10. import android.widget.TextView;  
  11.   
  12. public class MainActivity extends Activity {  
  13.   
  14.     private AlertDialog dialog;  
  15.     private View show_dialog;  
  16.     private EditText edit_text;  
  17.     private TextView text_view;  
  18.       
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         dialog = new AlertDialog.Builder(MainActivity.this).create();  
  23.         show_dialog = View.inflate(MainActivity.this, R.layout.edittext_dialog, null);    
  24.         edit_text = (EditText)show_dialog.findViewById(R.id.edit_text);  
  25.         text_view = (TextView)show_dialog.findViewById(R.id.text_view);  
  26.         dialog.setView(show_dialog);  
  27.         dialog.show();  
  28.         edit_text.addTextChangedListener(new EditTextWatcher());  
  29.     }  
  30.       
  31.     //EditTextWatcher is listener the editText changed  
  32.     public class EditTextWatcher implements TextWatcher{  
  33.   
  34.         public void afterTextChanged(Editable arg0) {  
  35.               
  36.         }  
  37.   
  38.         public void beforeTextChanged(CharSequence cs, int arg1, int arg2,  
  39.                 int arg3) {  
  40.             edit_text.setVisibility(View.VISIBLE);  
  41.             if((edit_text.getText()).length()<160){  
  42.                 text_view.setText(""+(160-(edit_text.getText()).length()));  
  43.             }  
  44.             else{  
  45.                 edit_text.setFocusable(true);  
  46.             }  
  47.         }  
  48.   
  49.         public void onTextChanged(CharSequence cs, int arg1, int arg2,  
  50.                 int arg3) {  
  51.               
  52.         }  
  53.           
  54.     }  
  55. }  


二、edittext_dialog.xml中的代码,这个代码的设计是关键,巧妙的利用RelativeLayout的一些属性来实现控件重叠的效果:

  1. <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="wrap_content"  
  5.     android:layout_height="wrap_content"  
  6.     android:layout_weight="1.0"   
  7. >  
  8.     <RelativeLayout    
  9.         xmlns:android="http://schemas.android.com/apk/res/android"  
  10.         android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content"  
  12.         >  
  13.         <EditText  
  14.            android:id="@+id/edit_text"  
  15.            android:layout_width="wrap_content"  
  16.            android:layout_height="wrap_content"  
  17.            android:layout_alignParentLeft="true"  
  18.            android:layout_alignParentRight="true"  
  19.            android:maxLines="5"  
  20.            android:maxLength="2000"  
  21.         />  
  22.         <TextView  
  23.            android:id="@+id/text_view"  
  24.            android:layout_width="wrap_content"  
  25.            android:layout_height="wrap_content"  
  26.            android:layout_alignParentRight="true"  
  27.            android:layout_alignBottom="@id/edit_text"  
  28.            android:textColor="#ffff0000"  
  29.         />  
  30.     </RelativeLayout>  
  31. </LinearLayout>  
  32. </span>  


 

三、AndroidManifest.xml中的代码:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.cn.daming"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <uses-sdk android:minSdkVersion="8" />  
  7.   
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  9.         <activity android:name=".MainActivity"  
  10.                   android:label="@string/app_name">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.                 <category android:name="android.intent.category.LAUNCHER" />  
  14.             </intent-filter>  
  15.         </activity>  
  16.   
  17.     </application>  
  18. </manifest>  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值