Android Studio 入门——002 控件篇

最近看的书是第一行代码老师推荐--感觉讲的很基础,很对小白的胃口。好了不罗嗦别的了,干货。

------------------------------------------------------------------------------------------------------------

控件篇

1.TextView这是一个再简单不过的控件---用来在页面上显示一些文本信息【这个控件必须声明的属性--宽、高、内容、id】

2.Button是程序用于和用户进行交互的一个重要控件--那些基本的属性和TerxtView差不多唯一一个比较骚的一点就是android:onClick="funcName"[这个点,在空间的基础入门不需要太多的了解,感觉这个事件处理的方式更加的简单一些]

3.EditText---程序与用户进行交互的控件---简单基础的控件在AndroidStudio里面都比较好实现,直接给一个id、宽度、高度差不多就能够满足一个空间的基本需求,然后再对不同的控件添加特殊的属性就好了。回到这个EditText里面特殊点的东西就是初始的输入框控件的提示文字--android:hint="text"  还有一个设置最大行数【保证输入再多EditText也不会继续拉伸】

4.ImageView--首先图片资源放到Drawable文件夹下,这样在后面文件名就可以直接R.drawable.name来获取对应文件。

5.ProgressBar--用于界面显示一个进度条【可以用style来改变进度条的样式】

6.AlertDialog--在这个里面需要注意的是要写cancel和ok按钮的时间处理方法

7.ProgressDialog--会显示一个带有进度条的对话框

----上面就是一些【基本上所有】基本的控件,接下来就来了解一下这些控件的布局方式,更加深入的美化自己的界面--------------------------------------

布局方式

什么是布局?布局是一种用于放置控件的容器,它可以按照一定的规律调整内部空间的位置,从而达到自己想要实现的精美界面。

1.线性布局   LinearLayout

线性布局会将它所包含的空间在线性方向上依次排列。

线性布局最重要的一个属性莫过于:android:weight【设置对应控件的权重,而后计算宽度】example:在一个editview和button控件水平排列的时候,不同的手机屏幕大小不一样,但是要求设计的button的大小不变。那么就给button的width设置为wrap_content,EditView的width设置权重为1就能够完美的展现设计好的button而不至于它被拉伸,影响外观。

2.相对布局  RelativeLayout     这种布局方式显得更加的随意,它通过相对定位的方式让空间出现在想要的位置---这种布局对于那种相对位置关系确定的控件很有用。

android:layout_alignParentLeft="bool"           android:layout_abolve/below/toLeftOf/toRightOf="@id/id"//这个是通过id获取到控件

3.帧布局   Frame Layout   这种布局方式相对于前面的两个就很简单了,应用场景也少得多。这种布局没有方便的定位方式,所有控件都会默认摆放在布局的左上角。

4.百分比布局  仔细看看上面的三种布局方式,也就LinearLayout支持按照比例实现控件的大小

但是百分比布局不算是默认布局,为此support库里面已经定义了该布局,我们需要做的就是在build.gracdle文件里面

dependencies{

compile fileTree(dir: 'libs',include:['*.jar'])

compile 'com.android.support.appcompat-v7:24.2.1'

compile 'com.android.support:percent:24.2.1'                    //在这个闭包里面添加这一行代码就好了

testCompile 'junit:junit:4.12'}

在使用百分百布局的时候需要把文件路径全部都写出来<android.support.percent.PercentFrameLayout></android.support.percent.PercentFrameLayout>

然后在这个里面就可以直接利用百分比创建控件的大小。

 

总结:在仔细看过这个布局以后,个人认为百分比布局完全可以在Linear Layout的布局里面利用weight来代替。【当然,又可以是自己还没有真正的实践,还不知道百分百布局的好处】

5.自定义布局  引入布局---对于那些拥有同样的控件的活动,可以考虑把那些基本的控件打包作为一个布局,然后每个活动只需引用这个布局就好。从而节省了代码量当然也是更加的方便。

当然第一步就是自定义一个布局--创建布局,命名为title;接下来就是在新的布局里面引用这个固定模式的布局--<include layout="@layout/title>

 创建一个自定义控件TitleLayout--首先新建一个类TitleLayout   extends LinearLayouot

 实现其构造函数TItleLayout(Context context,AtrributeSet attrs){

super(context,attrs);

LayoutInflater.from(context}.inflate(R.layout.title , this);}

想要在这里引用这个布局就需要包括这个完整的文件路径了,com.example.uicuntomviews.TitleLayout。然后,这个控件就被导入到对应的布局中了。至于要实现按钮点击的效果,直接在TitleLayout类里面获取到对应button的id,然后添加onClick()事件就好了。

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------据说是最难用的控件----ListView

首先是准备工作:1.你要展示的对象--listview里面一条一条的信息打包成为一个类;2.怎么样来展示--list每一条的展示布局;3.adapter--适配器,用来把你要展示的对象和该对象的布局方式绑定在一起。

-------由于自己属于小白,对于所以目前没办法只好按照大牛指的道路前进。那么在这里,关于ListView的东西感觉没有什么特别的地方,然后就投靠了更为强大的控件RecyclerView。

在build.gradle   dependences的闭包里面添加recyclerview的support,然后sync now 同步一下你的操作。

接下来就是在你的activity.layout 里面用recyclerview 还是老规矩完整的路径android.support.v7.widget.RecyclerView。

<在这里需要加一点干货viewholder。这个能够节省加载时间---毕竟小白无法用自己的话解释这个>

适配器WeaponAdapter  extends RecyclerVIew.Adapter<WeaponAdapter.ViewHolder>{

private List<Weapon> mWeaponList;                                       //适配器数据源

static class ViewHolder extends RecylerView.ViewHolder{               //weaponAdapter内部类viewholder的实现--也就是把它和weapon【对象】类的东西一致

 ImageView weaponImage;                                                         //weapon有什么成员 这个里面也需要什么成员 然后在构造函数里面给其赋值

TextView weaponName;                                                              //看起来很简单,对应该就是这么的简单

public ViewHolder(View view){

super(view);

this->weaponImage=(ImageView)view.findVIewById(R.id.weapon_img);

this->weaponName=(TextView)view.findVIewById(R.id.weapon_name);

}

}

public WeaponAdapter(List<Weapon> weaponList){                                             //waponadapter的构造函数 初始化数据源

mWeaponList=weaponList;

}

@override

public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){                                // weaponadapter重写创建view holder的函数

VIew view =LayoutInflate.from(parent.getContext()).inflate(R.laytou.weapon_item,parent,false);

ViewHolder viewHolder=new ViewHolder(view);

return viewHolder;

}

@override 

public void onBindViewHolder(ViewHolder holder,int position){

Weapon weapon=mWeaponList.get(position);

holder.weaponImage.setImageRescourse(weapon.getImage());

holder.weaponName.setText(weapon.gerName());

}

@override

public int getItemCount(){

return mWeaponList.size();

}

}

代码一堆,想放弃?哪有那么难哦,仔细看看就知道这个多么的清晰明了了。

仔细的对比一下,就知道用了viewholder和没用viewholder的代码思路都是差不多的,只不过viewholder把view装在一起了。

在activity里面编写代码的时候顺序:

1.初始化数据源;2.实例化recyclerview/listview;3.设置布局管理器;4.给实例化的对象添加布局管理器;5.创建适配器;6.给实例化的对象设置适配器。【然后就完成了-—-】

------------------------------------------------------------------------------------------------------------------------

大牛们说recyclerview强大肯定有他的道理,就比如下面的干货:实现横向滚动、瀑布流布局、网格布局。

横向滚动:这个实现起来就很简单,只需要两步:1.把weapon_item.layout里面的宽度设置为wrap_content【毕竟是横向,如果设置的是match_parent那样效果不明显】,顺便把weapon_item.layout的布局orientation改为vertical;2.在给实例化的对象recyclerview设置管理器之前,设置它的orientation为horizontal,然后运行就达到效果了。

瀑布流布局:这个的更改更加的简单。只需要把LinearLayoutManager换为StaggeredGridLayoutManager【构造函数有两个参数:第一个是瀑布的列,第二个是瀑布的方向】

网格布局:和瀑布流布局一样。这两个的差异,或许就在于每一块的适应位置的问题了;网格布局,整整齐齐的排列,瀑布流布局参差不齐的按照view大小排列,各有各自的好处。

 

最后的最后,提醒自己recycleview的点击事件。写在创建viewholder的函数里面,创建view holder以后就开始监听。

【感觉有点怪怪的,偷窥一样。但是listener不就是一个偷窥者嘛】

------------------------------------哇   总结完了我的控件篇-------------------------------------------------------------

------------------------------------------有点长,但是毕竟就是这么的多的东西啊,我能怎么办-------------------------

posted @ 2017-03-21 22:51  LayManDM  阅读(1422)  评论(0编辑  收藏  举报