geekband android #5 第二周分享(布局、ListView)

(由自己的新浪博客转移,原文作于: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十分相似,不再赘述。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值