布局细节
考虑兼容性: LinearLayout 因为有权重所以可以处理一些尺寸上的兼容, RelativeLayout 可以处理位置上的兼容
另外两个基本布局
TableLayout 继承 LinearLayout 的垂直布局, TableRow 继承 LinearLayout 的水平布局 ( 高版本有个 GridLayout)
AbsoluteLayout :绝对布局, android:layoutx android:layouty
布局技巧
<include /> 加载其他布局,提高重用性
如:
定义了 head_layout.xml 布局描述页面标题,这时其他布局页面可以通过以下方式引入
<include android:id="@+id/head_view" layout="@layout/head_layout"/>
<merge/> 标签可以使用在根布局为 FrameLayout 的布局中实现合并根节点到窗口的提供的 FrameLayout 容器中减少一层布局,
也可以使用在 <include> 所加载的布局根节点上,可以实现合并加载的跟布局到目标布局上
如:
head_layout.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:id="@+id/tx_back"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:gravity="center_vertical"
android:text=" 返回 "
android:textColor="#ffffff" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/tx_back"
android:background="@drawable/ic_launcher"
android:visibility="gone" />
<TextView
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_centerHorizontal="true"
android:gravity="center_vertical"
android:text=" 标题 "
android:textColor="#ffffff"
android:textSize="24sp" />
</merge>
使用 include
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xykj.relativelayoutdemo.MainActivity"
android:background="#55ff0000">
<include layout="@layout/head_layout"/>
<TextView
android:id="@+id/tx_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="#ff0000"
android:text="@string/hello_world" />
...
</RelativeLayout>
文本框
TextView: 显示文本处理文本效果的视图
android:gravity="center" 对齐方式
android:shadowColor="#000000" 阴影颜色
android:shadowRadius="5" 阴影范围
android:text="@string/my_tx" 设置文本内容
android:textColor="#ff0000" 文本颜色
android:textSize="24sp" 文本大小(单位为 sp )
android:textStyle="bold" 文本样式(粗体 斜体)
android:singleLine="true" 设置文本单行显示
android:ellipsize="marquee" 设置过长文本的显示方式(用省略号或者跑马灯)
android:marqueeRepeatLimit="marquee_forever" 设置跑马灯的循环次数
android:drawableLeft 文本左侧显示图标
android:drawableRight 文本右侧显示图标
android:drawableTop 文本顶部显示图标
android:drawableBottom 文本底部显示图标
android:drawableLeft="@drawable/ic_launcher"
在 Java 中操作布局中的视图
1 、需要在布局中针对要操作的视图添加 id
<TextView
android:id="@+id/m_tx001"
...
/>
2 、在 Activity 的 onCreate 中设置布局
/**
* 窗口被创建成功时触发的方法
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置窗口使用的布局
setContentView(R.layout.activity_main);
...
}
3 、设置布局之后,可以从布局中使用 findViewById(id) 加载视图对象
// 可以从布局中找到视图对象
TextView tx = (TextView)findViewById(R.id.m_tx001);
// 改变文本框内容
tx.setText(" 你好,这里是 Activity 中设置的显示内容 ");
// 设置文本颜色
tx.setTextColor(0x880000ff);
视图获取焦点
1 、设置触摸时得到焦点,每个视图都可以使用的基本属性
android:focusable="true"
android:focusableInTouchMode="true"
2 、让视图被选中,需要在 java 中控制
// 获取视图对象
TextView tv2 = (TextView) findViewById(R.id.m_tx002);
// 设置让视图被选中
tv2.setSelected(true);