(由自己的新浪博客转移,原文作于:2016.3.14)
1.关于布局
LinearLayout、RelativeLayout、FrameLayout.其中,LinearLayout、RelativeLayout是最长用的,基本可以完成你想要的布局。LinearLayout:线性布局。
orientation属性:它可以指定排列方向是vertical或者horizontal。
android:layout_gravity VS android:gravity:控件在布局中的对其方式 VS 文字在控件中的对其方式。
android:layout_weight :使用比例的方式在指定控件的大小。
RelativeLayout:相对布局,一个控件相对于另外一个控件的位置布局;一个控件相对于顶部或者底部等布局。这里需要注意给定ID。
android:layout_alignParentLeft、android:layout_alignParentRight、android:layout_alignParentTop、android:layout_alignParentBottom、 android:layout_centerInParent这五个属性分别为:位于父布局的左、右、顶端、底端、中心。
android:layout_above、android:layout_below、android:layout_toLeftOf、android:layout_toRightOf:让一个控件位于另一个控件的上、下边、左边、右边。
android:layout_alignLeft、android:layout_alignRight、android:layout_alignTop、android:layout_alignBottom:让一个控件的左边缘(右边缘、顶边、底边) 与另一个控件的左边缘(右边缘、顶边、底边)对齐。
2.非常重要的控件ListView
ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同事屏幕上原有的数据则会滚出屏幕的一种控件。
简单用法:
复杂用法:创建一个布局,在布局中放入一个<ListView>,创建一个活动,将该活动的setContentView为刚才的布局。然后在活动里new一个ArrayAdapter并依次传入当前上下文、ListView子项布局的ID、要适配的数据。(需要注意,当我们提供的数据是什么就要为ArrayAdapter的泛型指定什么,例如,如果提供数据是字符串:ArrayAdapter<String> adapter = new ArrayAdapter<String>(上下文 , ListView子项布局的ID , 数据)。)最后,初始化ListView并将adapter塞给它。
复杂用法主要复杂在:1.ListView子项的布局根据需要而自定义。
2.提供的数据在传给ListView显示在界面上之前需要定义一个实体类作为其适配器的适配类型。
3.创建一个可以满足需求的继承自ArrayAdapter的适配器,并将泛型指定为刚才定义的实体类。
4.在活动中初始化我们的数据,然后添加到列表中并将其作为待提供的数据传入创建的ArrayAdapter中,最后将adapter塞给 listview对象即可显示在界面上。
3.复杂用法的ListView实战示例
自定义ListView子项布局。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/linkman_image" android:layout_width="50dp" android:layout_height="50dp"/> <TextView android:id="@+id/linkman_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="10dip" /> </LinearLayout>创建实体类package geekband.demowechat; /** * Created by samyang on 2016/7/13. */ public class Linkman { private String name ; private int imageId ; public Linkman (String name , int imageId ) { this.name = name ; this.imageId = imageId ; } public String getName() { return name ; } public int getImageId() { return imageId ; } }创建一个可以满足需求的继承自ArrayAdapter的适配器
public class LinkmanAdapter extends ArrayAdapter<Linkman> { private int resourceId ; public LinkmanAdapter(Context context, int textViewResourceId, List<Linkman> objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId ; } @Override public View getView(int position , View convertView , ViewGroup parent) { Linkman linkman = getItem(position) ; View view ; ViewHolder viewHolder ; if (convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId , null) ; viewHolder = new ViewHolder() ; viewHolder.linkmanImage = (ImageView) view.findViewById(R.id.linkman_image) ; viewHolder.linkmanName = (TextView) view.findViewById(R.id.linkman_name) ; view.setTag(viewHolder); }else { view = convertView ; viewHolder = (ViewHolder) view.getTag(); } viewHolder.linkmanImage.setImageResource(linkman.getImageId()); viewHolder.linkmanName.setText(linkman.getName()); return view ; } class ViewHolder{ ImageView linkmanImage ; TextView linkmanName ; } }活动界面的代码public class MainActivity extends AppCompatActivity { private List<Linkman> linkmanList = new ArrayList<Linkman>() ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initLinkmans() ; //初始化数据LinkmanAdapter adapter = new LinkmanAdapter(MainActivity.this ,R.layout.linkman_item , linkmanList ); final ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent("com.example.Chat.ACTION_START"); startActivity(intent); } }); } private void initLinkmans() { Linkman sam = new Linkman("Sam",R.drawable.sam_pic) ; linkmanList.add(sam); Linkman edc = new Linkman("Edc", R.drawable.edc_pic) ; linkmanList.add(edc); Linkman linda = new Linkman("Linda", R.drawable.linda_pic) ; linkmanList.add(linda); Linkman jeo = new Linkman("Jeo", R.drawable.jeo_pic) ; linkmanList.add(jeo); Linkman tracy = new Linkman("Tracy", R.drawable.tracy_pic) ; linkmanList.add(tracy); Linkman water = new Linkman("Water", R.drawable.water_pic) ; linkmanList.add(water); Linkman amanda = new Linkman("Amanda", R.drawable.amandapic) ; linkmanList.add(amanda); Linkman shown = new Linkman("Shown Yue", R.drawable.yue_pic) ; linkmanList.add(shown); Linkman oscar = new Linkman("Oscar", R.drawable.oscar_pic) ; linkmanList.add(oscar); Linkman nic = new Linkman("Nic", R.drawable.nic_pic) ; linkmanList.add(nic); Linkman david = new Linkman("David", R.drawable.david_pic) ; linkmanList.add(david); Linkman peter = new Linkman("Peter", R.drawable.peter_pic) ; linkmanList.add(peter); Linkman john = new Linkman("John", R.drawable.john_pic) ; linkmanList.add(john); Linkman nicole = new Linkman("Nicole", R.drawable.nicole_pic) ; linkmanList.add(nicole); Linkman iris = new Linkman("Iris", R.drawable.iris_pic) ; linkmanList.add(iris); } }运行效果图:
![]()
4.GridView与ScrollView
GridView视图显示为宫格样式,多运用于照片库等。
ScrollView视图显示为以滚动条的形式,也多用于图库。
至于用法,它俩与ListView十分相似,不再赘述。