关于布局(Layout)的一切

之前在布局中有很多问题也有很多经验,遗憾都没记下来。现在一点点记下一些东西。

1.外层用LinearLayout的话,常常把orientation设成vertical,

android:orientation="vertical"

同时,常常还要在LinearLayout里面加一句:

android:gravity="center_horizontal"

这两句配合的话才能使这个线性布局里面的控件实现垂直布局+水平居中。或者把第二句的center_horizontal改成center_vertical,就可以实现垂直居中。

需要注意的是,不要在这个线性布局里面的控件里(比如一个Button)加上面那句“android:gravity="center_horizontal"” ,因为android中布局里写的话常常是对子控件起作用的。 

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

1.以前懂的,现在忘了,经过百度知道提问才回忆起来父容器的问题。“android:gravity="center_vertical" 只能使得文字在textview控件居中,并不能表示textview控件是居中的,这样在textview的父类布局器中再加上android:gravity="center_vertical"才行。

 
2状态栏布局的时候遇到一个被压扁的图标,后来才发现原来是因为父容器用的方向是android:orientation="vertical"导致的。
 
3.在父容器android:orientation="horizontal"时,子容器android:gravity="right"失效,不能居右;解决办法是父控件用RelativeLayout,子控件android:layout_alignParentRight="true"。
 
 
http://zhidao.baidu.com/question/578763424.html?sort=6#answer-1454297761
 
--------14:20 08/05/2014-------
 
 
2.另外,学会了神奇的9.png。。left和top切割了拉伸区域,right和bottom切割了文字区域。具体戳这里
 
3.终于明白为什么他们的项目的drawable里有那么多xml文件,原来每一个不同风格的按钮的按下操作都是要单独覆写的。
而Button风格的覆写也很简单,不需要在styles.xml里定义,不需要引用style,而是直接用:
android:background="@drawable/login_btn"

这里login_btn是一个在drawable文件夹里定义的xml文件(注意这时候不能有相同名字的9.png文件,不然Console会报错说已经有这个drawable了),含有按下和没按下两种状态的背景:

<?xml version="1.0" encoding="UTF-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_pressed="true"  
        android:drawable="@drawable/login_btn_focused" />  
    <item android:state_focused="true"  
        android:drawable="@drawable/login_btn_focused" />  
    <item android:drawable="@drawable/login_btn_bg" />  
</selector>  
除此之外可能还有别的样式需要在drawable里定义。具体戳这里
 
-----------May.9,2014-------------
今天有了一些制作9.png的心得。
 
 
比如上面这个图,刚做的,想用来实现一个左侧带有图标一个button,如下图:
 
 
left边的两个小点用于上下定位,让这个图标处于拉伸之后的正中央;Top边有一个点和一条线(那个点在左边圆角处,不仔细看看不见),用来让图标处于拉伸后的左侧。right和bottom两侧的两条线代表文字内容区域。bottom的线如果往右侧移动一些,文字就会往右定位。
 
另外,这个png图像像素不能太「高」,不然即使button用wrap_content来定义,这个按钮还是会很高,I mean,按钮显得很大。
 
还有,怎么感觉还是怪怪的呢,是不是icon离文字太远了。。等会改一下。
还有,我觉得每个按钮都用这样9.png方法定义风格的话,工作量实在略大。。如实我觉得把图标去掉也不错。。是否还有其他方法呢。
 
 
-------2015.11.20-------
今天遇到一个小tip,linearlayout下 android:layout_gravity="right"是无效的。下面是摘抄来的:

当作为父layout的LinearLayout的属性为android:orientation="vertical" 的时候,android:layout_gravity="?"这里设为横向的时候才能生效。比如:left,right,center_horizontal等

当作为父layout的LinearLayout的属性为android:orientation="horizental" 的时候,android:layout_gravity="?"这里设为纵向的时候才能生效。比如:top,bottom,center_vertical等;

posted @ 2013-11-04 12:38  LarryLawrence  阅读(358)  评论(0编辑  收藏  举报