zoukankan      html  css  js  c++  java
  • 二探ListView

    使用draw9patch

    1. 打开内置terminal
    2. 输入CD C:UsersGabyAppDataLocalAndroidsdk
    3. 在该目录下输入draw9patch
    4. 导入图片,开始绘制
    5. 本文成果图:

    成果图成果图

    1. 左边和上边绘制的黑线,表示在纵向和横向拉伸时拉伸的部分。右边和下边的黑线表示要用于显示内容的部分
    2. 从图片上可以看出,右边和下边的黑线可以偏中间一点

    上代码

    首先写MainActivity,先只考虑需要哪些功能,不去管如何实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);//首先写活动主布局文件
    ListView listV = (ListView) findViewById(R.id.listView);
    initData(); //接着写类和initData函数
    //单项布局文件,然后写adapter类
    mess_adapter adapter = new mess_adapter(MainActivity.this,R.layout.item_layout,mesgLists);
    listV.setAdapter(adapter);
    }

    顺序是:MainActivity->活动布局文件->Item类->Item类对象的集合->初始化该集合->item_layout单项布局->adapter类

    活动布局文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <LinearLayout
    android:orientation="vertical"/>
    android:background="#d8e0e8">

    <ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:divider="#0000"
    android:layout_weight="1"
    >
    </ListView>

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:hint="input your message"/>
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Send"/>
    </LinearLayout>
    </LinearLayout>

    注意:

    • android:divider="#0000"该项用于设置ListView的的分割线为透明
    • 输入框和button通过LinearLaout绑定在一起
    • 最外LinearLayoutorientation设置为vertical是让ListView和内LinearLayout上下放置
    • ListView设置height = "0dp" weight = "1"切内LinearLayout无设置,意思就是,在保证内LinearLayout的区域大小后,其他空间都归ListView,同理内LinearLayout的EditText和Button

    Item类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class Item {
    public static final int SEND = 1;
    public static final int REC = 0;
    private int type;
    private String content;

    public Item(int wtype, String content){
    this.type = wtype;
    this.content = content;
    }

    public int getType() {
    return type;
    }

    public String getContent() {
    return content;
    }
    }

    注意:

    • 如果要在MainActivity中使用SEND来给一个Item对象赋值,那么这个SEND常量就一定得在Item类中定义

    Item类对象的集合->初始化该集合

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private List<Item> mesgs = new ArrayList<Item>();

    private void initData() {
    Item con_a = new Item(Item.REC,"hello my name is Gaby");
    mesgLists.add(con_a);
    Item con_b = new Item(Item.SEND,"Hi,Gaby! I'm Cici");
    mesgLists.add(con_b);
    Item con_c = new Item(Item.SEND,"where are you come from?");
    mesgLists.add(con_c);
    Item con_d = new Item(Item.REC,"I'm from China");
    mesgLists.add(con_d);

    Item con_e = new Item(Item.SEND,"oh? I come from Japan");
    mesgLists.add(con_d);

    Item con_f = new Item(Item.REC,"so you must know yui hatano");
    mesgLists.add(con_f);

    Item con_g = new Item(Item.SEND,"I do,she is the best");
    mesgLists.add(con_g);
    }

    item_layout单项布局

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
    android:id="@+id/left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/qq"
    android:layout_gravity="left">
    <TextView
    android:id="@+id/tv_left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    </LinearLayout>

    <LinearLayout
    android:id="@+id/right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:background="@drawable/oo">
    <TextView
    android:id="@+id/tv_right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    </LinearLayout>

    </LinearLayout>

    注意:

    • android:orientation="vertical"以及两个LinearLayout中各自的android:layout_gravity="left"android:layout_gravity="right"
      使得单项布局中的两个对话框一左一右垂直排列
      item_layout
    • 实际上对话框中带有TextView,因为LinearLayout中的两个属性都是wrap_content

    adapter类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class mess_adapter extends ArrayAdapter<Item>{

    private int resourceId;

    public mess_adapter(Context context,int textViewResourceId, List<Item> objects) {
    super(context,textViewResourceId, objects);
    resourceId = textViewResourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    ViewHolder viewHolder;
    Item item = getItem(position);
    if(convertView == null){
    viewHolder = new ViewHolder();
    view = LayoutInflater.from(getContext()).inflate(resourceId,null);
    viewHolder.left_layout = (LinearLayout) view.findViewById(R.id.left);
    viewHolder.right_layout = (LinearLayout) view.findViewById(R.id.right);
    viewHolder.tv_right = (TextView) view.findViewById(R.id.tv_right);
    viewHolder.tv_left = (TextView) view.findViewById(R.id.tv_left);
    view.setTag(viewHolder);
    } else{
    view = convertView;
    viewHolder = (ViewHolder) view.getTag();
    }
    if(item.getType() == Item.SEND){//send is in the left
    viewHolder.right_layout.setVisibility(View.GONE);
    viewHolder.tv_left.setText(item.getContent());
    } else{
    viewHolder.left_layout.setVisibility(View.GONE);
    viewHolder.tv_right.setText(item.getContent());
    }
    return view;
    }

    class ViewHolder{
    LinearLayout left_layout;
    LinearLayout right_layout;
    TextView tv_left;
    TextView tv_right;
    }
    }

    注意:

    • 因为不能通过一个布局去取得布局中的控件,也因此,每个控件都设置id
    • viewHolder存放着四个控件实例
  • 相关阅读:
    对测试集进行测试,只提供了思路,程序是不能用的
    对每块训练集的前99000数据训练,后1000数据集进行测试
    loosalike数据拆分
    我的腾讯looksalike解题思路
    one-hot encoding 对于一个特征包含多个特征id的一种处理方法
    ValueError: Cannot feed value of shape ..
    滴滴面试总结
    Lintcode Digit Counts
    【lintcode】Count of Smaller Number before itself
    lintcode Sliding Window Median
  • 原文地址:https://www.cnblogs.com/gabygoole/p/5299858.html
Copyright © 2011-2022 走看看