对于一个相对比较复杂的界面,可以用<include>重用来优化布局,也就是在一个布局里面引入另一个布局。比如说我们程序界面的表头公共的部分,这时候可以将这个公共的部分提取出来放在一个独立的布局文件中,,然后在界面的布局文件里引用这个公共的布局。
1.下面这个就是独立出来的公共布局include_actionbar.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/app_color"> <TextView android:id="@+id/back" android:layout_width="60dp" android:layout_height="match_parent" android:gravity="center" android:text="返回" android:textColor="@color/white" android:textSize="14dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerInParent="true" android:gravity="center" android:text="标题" android:textColor="@color/white" android:textSize="16dp" /> <TextView android:id="@+id/more" android:layout_width="60dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:gravity="center" android:text="更多" android:textColor="@color/white" android:textSize="14dp" /> </RelativeLayout>2.接下来就在activity_main.xml中使用 <include>标签 引入公共布局
在ListView的下面添加一个相对布局,很重要的一个属性就是在这个布局里面添加android:layout_above这个属性
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <include android:id="@+id/actionbar" layout="@layout/include_actionbar" /> <RelativeLayout android:id="@+id/rl_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@+id/rl_buttom" android:layout_below="@+id/actionbar"> <ListView android:id="@+id/lv_content" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:id="@+id/ll_order" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_margin="10dp" android:background="@drawable/shape_radius_yellow"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="新品预定" android:textColor="@color/white" android:textSize="16dp" /> </LinearLayout> </RelativeLayout> <RelativeLayout android:id="@+id/rl_buttom" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@color/grey"> <TextView android:id="@+id/txt_price" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:gravity="center" android:text="合计:43.2元" android:textColor="@color/white" android:textSize="14dp" /> <TextView android:id="@+id/sure" android:layout_width="60dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:gravity="center" android:text="确定下单" android:textColor="@color/white" android:textSize="14dp" /> </RelativeLayout> </RelativeLayout>3.item_layout.xml
<?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" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/txt_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="16dp" /> </LinearLayout>
4.shape_radius_yellow.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 圆角,android:radius为角的弧度,值越大角越圆。 --> <corners android:radius="5dp" /> <!-- 实心,就是填充的意思 --> <solid android:color="@color/yellow" /> <!-- 描边,android:width="1dp" 描边的宽度,android:color 描边的颜色。--> <stroke android:width="1dp" android:color="@color/yellow" /> </shape>
5.color.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="app_color">#65A046</color> <color name="yellow">#F2BE2C</color> <color name="white">#FFFFFF</color> <color name="grey">#1F292A</color> </resources>
6.MyAdapter,代码写的很详细
/** * @author: xiaolijuan * @description: 适配器 * @projectName: ListViewDemo * @date: 2015-10-20 * @time: 12:24 */ public class MyAdapter extends BaseAdapter { private Context context; private List<String> mTitleArray;// 标题数组 private int layoutId; /** * 构造方法 * @param context 上下文对象 * @param mTitleArray 标题数组 * @param layoutId 布局Id */ public MyAdapter(Context context, List<String> mTitleArray, int layoutId) { this.context = context; this.mTitleArray = mTitleArray; this.layoutId = layoutId; } /** * 获取Item总数 * @return */ @Override public int getCount() { return mTitleArray.size(); } /** * 获取一个Item对象 * @param position * @return */ @Override public Object getItem(int position) { return mTitleArray.get(position); } /** * 获取指定item的Id * @param position * @return */ @Override public long getItemId(int position) { return position; } /** * 绘制的内容均在此实现 * @param position position就是位置从0开始 * @param convertView convertView是Spinner中每一项要显示的view * @param parent parent就是父窗体了,也就是ListView * @return */ @Override public View getView(int position, View convertView, ViewGroup parent) { View item = convertView != null ? convertView : View.inflate(context, layoutId, null); TextView txt_name = (TextView) item.findViewById(R.id.txt_title); txt_name.setText(mTitleArray.get(position)); return item; } }7.主界面的Java代码
/** * @author: xiaolijuan * @description: 在ListView下面添加一个相对布局的小Dome * @projectName: ListViewDemo * @date: 2015-10-20 * @time: 10:24 */ public class MainActivity extends Activity { private ListView mListView;//列表视图控件 private LinearLayout mOrder;//线性布局 Activity context;//上下文对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; initView(); } /** * 初始化视图 */ private void initView() { mListView = (ListView) findViewById(R.id.lv_content); mOrder = (LinearLayout) findViewById(R.id.ll_order); MyAdapter adapter = new MyAdapter(context, getDatas(), R.layout.item_layout); mListView.setAdapter(adapter); mListView.setOnItemClickListener(new ItemClickListener()); /** * 给LinearLayout添加单击事件 */ mOrder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context, "新品预定", Toast.LENGTH_LONG).show(); } }); } /** * 获取数据源 * * @return */ private List<String> getDatas() { List<String> array = new ArrayList<String>(); for (int i = 0; i <= 45; i++) { array.add("这是第" + i + "个Item"); } return array; } /** * 为ListView每个Item添加点击事件 */ public class ItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(context, "您点击的是第" + position + "个Item", Toast.LENGTH_LONG).show(); } } }