布局列表與列表控件

簡單介紹其它常用控件
WebView---加載網(wǎng)頁
ListView---顯示列表
GridView---顯示表格式列表
ScrollView---內(nèi)容可滾動視圖
SurfaceView---非常重要的繪圖容器

五大布局

  1. 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ū)域。

  1. RelativeLayout---相對布局

layout_alignParentTop(…)="true"---與父容器的上邊緣對齊
layout_above(below)---將該控件的下(上)邊緣和給定id的控件上(下)邊緣對齊
layout_toLeft(Right)Of---將該控件的左(右)邊緣和給定id的控件左(右)邊緣齊
layout_alingnLeft(…)---將該控件左邊緣與給定id控件的左邊緣對齊
layout_centerHorizontal="true"---將控件置于父控件水平方向的中央
layout_centerInParent---將控件置于父控件水平方向和垂直方向的中央
layout_centerVertical---將控件置于父控件垂直方向的中央

  1. FrameLayout---幀布局

  2. AbsoluteLayout---絕對布局

  3. TableLayout---表格布局


  • 一些有用的屬性
    <include />---重用布局文件
    <merge />---減少視圖層級
    <ViewStub />---需要時才加載

  • 如何優(yōu)化布局
    減少層次、刪除無用布局、布局結(jié)構(gòu)要清晰、選擇合適的布局

  • 小技巧
    不要嵌套多個使用layout_weight屬性的LinearLayout
    Android lint
    HirearchyViewer


ListView

  • 常用屬性
    listSelectorscrollingCache、cacheColorHintfastScrollEnabled...
  • 常用方法
    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。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容