簡單介紹其它常用控件
WebView---加載網(wǎng)頁
ListView---顯示列表
GridView---顯示表格式列表
ScrollView---內(nèi)容可滾動視圖
SurfaceView---非常重要的繪圖容器
五大布局
-
LinearLayout---線性布局
orientation(布局方向)---Horizontal | Vertical
gravity——控件放入容器的重心位置
layout_gravity——子控件的重心位置
如果設(shè)置方向為Vertical的權(quán)值(layout_weight),子Viwe的width設(shè)為0dp;如果設(shè)置方向為Horizaotal的權(quán)值,子View的height設(shè)為0dp;可以添加一個View設(shè)置其weight實現(xiàn)空白區(qū)域。
-
RelativeLayout---相對布局
layout_alignParentTop(…)="true"---與父容器的上邊緣對齊
layout_above(below)---將該控件的下(上)邊緣和給定id的控件上(下)邊緣對齊
layout_toLeft(Right)Of---將該控件的左(右)邊緣和給定id的控件左(右)邊緣齊
layout_alingnLeft(…)---將該控件左邊緣與給定id控件的左邊緣對齊
layout_centerHorizontal="true"---將控件置于父控件水平方向的中央
layout_centerInParent---將控件置于父控件水平方向和垂直方向的中央
layout_centerVertical---將控件置于父控件垂直方向的中央
-
FrameLayout---幀布局
-
AbsoluteLayout---絕對布局 -
TableLayout---表格布局
一些有用的屬性
<include />---重用布局文件
<merge />---減少視圖層級
<ViewStub />---需要時才加載如何優(yōu)化布局
減少層次、刪除無用布局、布局結(jié)構(gòu)要清晰、選擇合適的布局小技巧
不要嵌套多個使用layout_weight屬性的LinearLayout
Android lint
HirearchyViewer
ListView
- 常用屬性
listSelector、scrollingCache、cacheColorHint、fastScrollEnabled... - 常用方法
addHeaderView、addFooterView
在ListView主類中:
public class PhoneBookActivity extends AppCompatActivity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_book);
// 獲取ListView對象
mListView = (ListView) findViewById(R.id.phone_book_list_view);
// new 一個Adapter對象
PhoneBookAdapterActivity phoneBookAdapterActivity = new PhoneBookAdapterActivity(PhoneBookActivity.this);
// 將Adapter對象傳入
mListView.setAdapter(phoneBookAdapterActivity);
}
}
在Adapter類中需要注意的:
private LayoutInflater mLaylouInflater;
public PhoneBookAdapterActivity(Context context){
mLaylouInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mLaylouInflater.inflate(R.layout.activity_item_info, null);
TextView nameTextView = (TextView) convertView.findViewById(R.id.item_info_text_view);
nameTextView.setText(mName[position]);
return convertView;
}
- 設(shè)置點擊事件
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(PhoneBookActivity.this, mName[position]+"被點擊了!", Toast.LENGTH_SHORT).show();
}
});
- 設(shè)置長按事件
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(PhoneBookActivity.this, mName[position]+"被長按了!", Toast.LENGTH_SHORT).show();
return true;
}
});
注意:
onItemLongClick方法的返回值如果為false,不但執(zhí)行長按事件處理方法,還會執(zhí)行點擊時間處理方法。
- 更新
ListView中的數(shù)據(jù)
// 新建另外一些數(shù)據(jù)
// 替換掉老數(shù)據(jù)
// 刷新listview,讓它更新自己的視圖
mName = new String[]{"新的嘖嘖嘖", "新的嘖嘖嘖2", "新的嘖嘖嘖3"};
phoneBookAdapterActivity.refreshData(mName);
public void refreshData(String[] name){
mName = name;
notifyDataSetChanged();
}
> `notifyDataSetChanged();`放在`listView`主類中也生效。
- 重用和性能優(yōu)化
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
convertView = mLaylouInflater.inflate(R.layout.activity_item_info, null);
viewHolder = new ViewHolder();
viewHolder.nameTextView = (TextView) convertView.findViewById(R.id.item_info_text_view);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.nameTextView.setText(mName[position]);
return convertView;
}
// 新建類存放Item View
class ViewHolder
{
TextView nameTextView;
}
- 待補(bǔ)充
1. Item不同怎么辦? `getItemViewType`
2. 風(fēng)格迥異的分割線
# GridView 和 ScrollView
- GridView 常用屬性:`numColumns`、`columnWidth`、`horizontalSpacing`、`verticalSpacing`...
- ScrollView 只支持垂直滾動,否則可用HorizontalScrollView。