Layouts笔记¶
常用布局¶
LinearLayout¶
match_parent == fill_parent
布局自身
- layout_gravaty
- layout_width
- layout_height
- divider
- showDivider none, beginning, end, middle(每两个组件之间)
- dividerPadding
子元素的对齐方式
- orientaion horizontal(default), vertical
- gravity
layout_width与layout_weight组合
- 对于在horizontal对齐的LinearLayout内的两个View,如果View的layout_width被设置为0dp,并设置了layout_weight属性,将按权重分配layout_width
- 如果容器内View被设置为match_parent,并设置了layout_weight属性,设有4份View,每份View的最终权重为(1-(份数-1)*(权重/权重之和));如View权重1, 2, 3,则最终Layout_width为2, 1, 0
- wrap_content则视情况而定,居于前述两种情况之间
LinearLayout不能在同一水平线上布置一左一右的两个控件
给予已指定weight的子View设置0dp的高度,可以优化测量
属性
baselineAligned
子View是否根据baseline对齐
RelativeLayout¶
- gravity / ignoreGravity
- 根据父容器定位 layout_alignParentXxx (Left | Right | Bottom | Top) layout_centerInParent (Horizontal | Vertical)
- 根据兄弟组件定位 layout_toXxxOf (Left | Right) layout_above(below) layout_alignXxx (Left | Right | Top | Bottom)
- layout_margin(外边距)
- layout_padding(内填充)
另外,梅花布局
TableLayout¶
属性
- collapseColumns 指定隐藏行
- shrinkColumns 指定可收缩行
- stretchColumns 制定可伸展行
单元格
- layout_column
- layout_span
FrameLayout¶
属性
- foreground 前景色/前景图像
- foregroundGravity
GridLayout¶
属性
- columnCount, rowCount
对于布局中的View
- layout_row, layout_column 设置行列 0-based
- layout_rowSpan, layout_columnSpan 设置跨行,设置跨列
AbsoluteLayout¶
专业适配当前屏幕
DrawerLayout¶
布局根节点必须是DrawerLayout
主题NoActionBar化
<style name="AppTheme.NoActionBar" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
自定义Toobar
onCreate()
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
渲染菜单
onCreateOptionMenu(Menu menu)
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
Appbar与Drawer联动
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
);
drawer.addDrawerListener(toggle);
toggle.syncState();
ViewPager¶
容器类 经常与Fragment一起使用
需要PageAdapter 存在FragmentPageAdapter以及FragmentStatePageAdapter