Android基础(一)

来源:互联网 发布:中国现状 知乎 编辑:程序博客网 时间:2024/06/06 02:13
一、布局
1、AbsoluteLayout,其子控件使用layout_x,layout_y来控制位置。
优点:子控件能够最自由的摆放
缺点:受手机屏幕大小影响很大
2、LinearLayout,
属性:
android:orientation="vertical"["horizontal"],vertical:表示子控件垂直摆放,horizontal表示子控件水平摆放
android:baselineAligned="true"["false"]
表示LinearLayout中的子控件的摆放要依据基线来对齐。
true是对齐,false不对齐。


android:baselineAlignedChildIndex="childIndex"
表示以哪一个子控件的基线来对齐。


android:gravity="center_horizontal"
表示子控件对齐的方向,可以向左,右,上,下,居中...


子控件属性:
android:layout_weight="1.0"
这个属性只有在LinearLayout中有效,他表示我们的子控件所需要占据的大小,用于与其他的控件分割父控件的空间。


优点:受屏幕变化影响小,排列整齐
缺点:排列方式少
3、FrameLayout
属性:
android:foreground,可以使用这个属性在整个布局的前面添加一个图片或者颜色。
android:foregroundGravity,调整由android:foreground设置的图片的对齐方向。


优点:有多重动画控件都由FrameLayout实现,说明FrameLayout很适合播放动画的功能界面实现。
缺点:约束比较强,控件摆放的方式只有这一种,对内部控件操作的手段也比较少。
4、RelativeLayout
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight,贴到指定的父控件的边缘。


android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf
android:layout_toEndOf,放置在指定id的控件的指定方向上。


android:layout_above
android:layout_below,放置在指定id的控件的上或下。


android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
android:layout_alignBottom,与指定id的控件边缘对齐。


android:layout_centerInParent,将控件放置在父控件的中间。
优点:内部子控件都是自己相对摆放,在屏幕分辨率出现巨大变化的时候,他们之间的相对位置都不会变。这个布局类型可以很大的减少我们屏幕出现变化时,界面效果的差异性。


缺点:当我们的控件之间的相对关系建立之后,不容易再做修改。
二、Button
1、Button、ImageButton的关系:Button包含了ImageButton
2、Button的点击事件
(1)完全在Activity中关联点击事件
XML文件中
<Button     android:id="@+id/btn_login"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="Click Me"/>


Activity文件中:
Button button = (Button) findViewById(R.id.button_send);button.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// Do something in response to button click}});


(2)在xml布局文件中关联点击事件
XML文件中
<Button     android:id="@+id/btn_login"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="Click Me"android:onClick="myClick"/>


Activity文件中
//格式一定要这样写
public void myClick(View v) {// Do something in response to button click}


3、自定义外观
新建一个seletor文件,里面定义了按钮各个状态的背景
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>    <item android:drawable="@drawable/btn_bg_hover" android:state_hovered="true"></item>    <item android:drawable="@drawable/btn_bg_normal"></item></selector>


三、EditText
1、可输入文本框,这个控件可以让用户输入文本信息。
<EditTextandroid:id="@+id/et_userName"android:layout_width="fill_parent"android:layout_height="wrap_content" />



2、重要属性
(1)android:hint="@string/email_hint"
用来给编辑框加入提示信息,在输入框没有内容的时候会显示



(2)android:inputType="textEmailAddress" 


限制我们输入的内容的类型



(3)android:imeOptions="actionSend"


定义软键盘确认按钮的类型,需要我们使用OnEditorActionListener来监听。

class EditorActionlistener implements OnEditorActionListener {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {switch (actionId) {// 获取到软件盘的命令case EditorInfo.IME_ACTION_NEXT:System.out.println("下一个!");return false;case EditorInfo.IME_ACTION_DONE:System.out.println("完成!");return true;}return false;}}


(4)android:password="true"
以密文形式输入信息。改回false之后,就有可以以明文形式输入。
EditText editPassWord = (EditText) findViewById(R.id.ed_password);
//表示明文显示
editPassWord.setInputType(EditorInfo.TYPE_CLASS_TEXT
| EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
四、CheckBox
1、复选框
2、可以使用onClick点击事件,也可以使用OnCheckedChangeListener监听器。使用监听器可以和明文显示密码相结合
XML文件:
   
 <EditText        android:id="@+id/ed_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/ed_username"        android:layout_marginTop="10dp"        android:background="@drawable/ed_bg_selector"        android:drawableRight="@drawable/key"        android:hint="Your password"        android:inputType="textPassword"        android:maxLength="10"        android:maxLines="1"        android:minHeight="50dp"        android:singleLine="true"        android:textColor="#FFFFFF"         android:imeOptions="actionDone"/>    <CheckBox        android:id="@+id/cb_passvisible"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/ed_password"        android:layout_marginTop="5dp"        android:text="显示密码" />


Activity文件:
CheckBox checkBox = (CheckBox) findViewById(R.id.cb_passvisible);checkBox.setOnCheckedChangeListener(new CheckedChangeListener());/** * 显示密码CheckBox监听器 *  * @author Eric *  */class CheckedChangeListener implements OnCheckedChangeListener {@Overridepublic void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {if (isChecked) {//明文显示密码editPassWord.setInputType(EditorInfo.TYPE_CLASS_TEXT| EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);} else {//密文显示密码editPassWord.setInputType(EditorInfo.TYPE_CLASS_TEXT| EditorInfo.TYPE_TEXT_VARIATION_PASSWORD);}}}


五、ListView
1、列表控件,实现一个数据列表,能方便地让我们修改数据,并同时影响
界面。
2、ListView两种加载数据的方法
(1)XML文件存放数据
1)XML--res_cities.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string-array name="cities">        <item >请选择城市</item>        <item >沈阳</item>        <item >成都</item>        <item >合肥</item>        <item >德阳</item>        <item >江油</item>    </string-array></resources>


2)Layout用来装ListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"   android:layout_height="match_parent"    android:orientation="vertical" ><ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="match_parent"android:entries="@array/cities" ></ListView></LinearLayout>


(2)Adapter加载数据
1)Layout
Layout_listview.xml用来装ListView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"   android:layout_height="match_parent"    android:orientation="vertical" ><ListView        android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="match_parent"android:entries="@array/cities" ></ListView></LinearLayout>


item_contacts.xml用来定义ListView的每个Item的外观
    <TextView        android:id="@+id/tv_name"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignTop="@id/iv_head"        android:layout_toRightOf="@id/iv_head"        android:text="这是一个Item"        android:textSize="20sp" />


2)Activity中:
public class ListViewAcivity extends Activity {MyBaseAdapter infoAdapter;AbstractList<String> userInfo = new ArrayList<String>();EditText ed_name;ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 加载界面setContentView(R.layout.layout_listview);userInfo.add("北京");userInfo.add("上海");userInfo.add("广州");// 找到ListViewed_name = (EditText) findViewById(R.id.ed_name);//infoAdapter = new MyBaseAdapter(userInfo);// 为ListView设置适配器listView.setAdapter(infoAdapter);}/** * 创建一个自己的数据适配器 *  * @author Eric *  */class MyBaseAdapter extends BaseAdapter {AbstractList<String> userInfo;LayoutInflater inflater;// 适配器public MyBaseAdapter() {}public MyBaseAdapter(AbstractList<String> userInfo) {// 得到数据this.userInfo = userInfo;// 得到LayoutInflater的对象inflater = ListViewAcivity.this.getLayoutInflater();}@Overridepublic int getCount() {// 返回的数值决定了这个ListView装载的数据条数if (userInfo != null) {return userInfo.size();}return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder = null;// 对ListView的性能进行优化,convertView是Google给我们的可复用的对象// 当我们的屏幕中间有一个view消失,那么这个view就会被复用,他会用来装入将要显示的// view的内容if (convertView == null) {// 当convertView为空null的时候,那么就说明是第一次创建view,那么就创建一个对象viewHolder = new ViewHolder();// 把ListView的item用布局文件填充,返回了一个view,这个view将会被复用,那么就设置为convertViewconvertView = inflater.inflate(R.layout.item_contacts, null);// 设置ViewHolder里面的内容。viewHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);// 将这个装有数据的viewHolder设置成convertView的标签convertView.setTag(viewHolder);}// 得到convertView的标签viewHolder = (ViewHolder) convertView.getTag();// 设置内容viewHolder.tv_name.setText(userInfo.get(position % getCount()));// 返回这个convertViewreturn convertView;}// 这个类用来装载ListView的布局的子控件class ViewHolder {TextView tv_name;}/******************************下面俩个方法我们很少会使用***************************************/@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}}}


3、动态加载数据
(1)在我们向数据容器中加入了新数据的时候,我们就需要更新ListView更新。
由用户或者服务器更改了数据,然后调用Adapter.notifyDataSetChanged();提醒ListView更新数据。
4、ListView属性
(1)android:divider="@color/mycolor" 间隔线的图片或者颜色


(2)android:dividerHeight="3dip"间隔线的宽度
用于修改ListView中每个item之间的间隔线
(3)


android:stackFromBottom="true"从列表最下方开始。


(4)android:transcriptMode="alwaysScroll"一直显示新来的数据。
(5)
android:cacheColorHint="@android:color/transparent" 滑动时,背
景透明。
(6)如果我们需要ListView显示新数据是从上至下的话,那我们在添加数据的时候,从最上面添加。
0 0
原创粉丝点击