android用java動態(tài)增添刪除修改布局
XML對開發(fā)者來說十分的方便,不僅使用起來簡單,而且能夠及時(shí)調(diào)試,修改界面之后馬上能看到效果。
Java設(shè)置布局不具有這個(gè)優(yōu)勢。但是java卻可以動態(tài)對布局進(jìn)行操作,這是xml所做不到的。筆者認(rèn)為,新手索要掌握的java動態(tài)設(shè)置布局主要有兩點(diǎn),一方面是對布局的屬性進(jìn)行修改,另一方面是增添和刪除控件。
首先說一下動態(tài)設(shè)置布局在項(xiàng)目中的應(yīng)用,拿高德地圖舉個(gè)例子,如下圖:
我們可以看到,高德地圖的默認(rèn)界面與點(diǎn)擊地圖之后的界面是不一樣的,上面同樣的控件在layout中的位置也不一樣,這個(gè)用xml便是難以實(shí)現(xiàn)的了,于是java動態(tài)設(shè)置布局便有了其重要性。
接下來看一下分享的demo效果:
代碼其實(shí)比較容易理解,具體的解釋已經(jīng)注釋在代碼中了,讀者可以自己寫了理解一下。
MainActivity:
package com.example.activeuitest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button BT_Gone;//讓布局隱藏 private Button BT_Visiable;//讓布局顯示 private Button BT_Add;//增添布局 private Button BT_Delete;//刪除布局 private RelativeLayout RL_main; private RadioGroup RL_RadioGroup; private RelativeLayout RL_InfoTip; private LinearLayout LL_test; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();//初始化 } private void init() { BT_Gone= (Button) findViewById(R.id.button1); BT_Visiable= (Button) findViewById(R.id.button2); BT_Add= (Button) findViewById(R.id.button3); BT_Delete= (Button) findViewById(R.id.button4); RL_main=(RelativeLayout)findViewById(R.id.main_layout); RL_RadioGroup=(RadioGroup)findViewById(R.id.radio_group); RL_InfoTip=(RelativeLayout)findViewById(R.id.info_tip); //此處要獲取其他xml的控件需要先引入改layout的view(這個(gè)linearlayout用于演示添加和刪除) View view= LayoutInflater.from(this).inflate(R.layout.test_linear_layout,null,false ); LL_test=(LinearLayout)view.findViewById(R.id.test_layout); BT_Gone.setOnClickListener(this); BT_Visiable.setOnClickListener(this); BT_Add.setOnClickListener(this); BT_Delete.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.button1: RL_InfoTip.setVisibility(View.GONE);//底部tip設(shè)置不可見 //初始化寬高屬性 RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);//設(shè)置置底 lp1.setMargins(10, 0, 0, 10);//設(shè)置margin,此處單位為px RL_RadioGroup.setLayoutParams(lp1);//動態(tài)改變布局 break; case R.id.button2: RL_InfoTip.setVisibility(View.VISIBLE);//底部tip設(shè)置可見 //初始化寬高屬性 RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp2.setMargins(10, 0, 0, 10);//設(shè)置margin,此處單位為px lp2.addRule(RelativeLayout.ABOVE, R.id.info_tip);//設(shè)置above,讓控件于R.id.info_tip之上 RL_RadioGroup.setLayoutParams(lp2);//動態(tài)改變布局 break; case R.id.button3: //初始化寬高屬性,此處單位為px RelativeLayout.LayoutParams lp3 = new RelativeLayout.LayoutParams(200, 200); lp3.addRule(RelativeLayout.BELOW, R.id.button4);//設(shè)置below,讓控件于R.id.button4之下 RL_main.addView(LL_test, lp3);//動態(tài)改變布局 LL_test.setVisibility(View.VISIBLE);//此處需要設(shè)置布局顯示,否則會不顯示 break; case R.id.button4: RL_main.removeView(LL_test);//動態(tài)改變布局 break; } } }
activity_main:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_layout" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="隱藏"/> <Button android:id="@+id/button2" android:layout_below="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="顯示"/> <Button android:id="@+id/button3" android:layout_below="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="添加布局"/> <Button android:id="@+id/button4" android:layout_below="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="刪除布局"/> <RadioGroup android:id="@+id/radio_group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:layout_marginLeft="10px" android:layout_marginBottom="10px" android:orientation="horizontal" android:layout_above="@+id/info_tip" android:background="@android:color/darker_gray" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="精確度:"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="普通" android:textColor="@android:color/black" /> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="精準(zhǔn)" android:textColor="@android:color/black" /> </RadioGroup> <RelativeLayout android:id="@+id/info_tip" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="20dp" android:background="@android:color/darker_gray" > <TextView android:id="@+id/info_tip_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="受災(zāi)地點(diǎn)" android:textColor="@android:color/black" android:textSize="20dp"/> <TextView android:id="@+id/info_tip_distance" android:layout_below="@+id/info_tip_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="受災(zāi)距離"/> <TextView android:id="@+id/info_tip_address" android:layout_toRightOf="@+id/info_tip_distance" android:layout_below="@+id/info_tip_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="受災(zāi)地址"/> <Button android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="詳情"/> <LinearLayout android:layout_below="@+id/info_tip_address" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="駕車"/> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="公交"/> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="步行"/> </LinearLayout> </RelativeLayout> </RelativeLayout>
test_linear_layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="200dp" android:layout_height="200dp" android:background="@android:color/holo_blue_bright" android:id="@+id/test_layout" android:orientation="horizontal" > </LinearLayout>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Android利用zxing快速集成二維碼掃描的實(shí)例教程
最近二維碼真是越來越火了,隨便電視上、網(wǎng)絡(luò)上、商場里,到處都是二維碼,所以下面這篇文章我們就來給大家介紹關(guān)于Android利用zxing快速集成二維碼掃描的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。2017-09-09解析android中的幫助、about、關(guān)于作者、HELP等提示頁面
本篇文章是對android中的幫助、about、關(guān)于作者、HELP等提示頁面進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06在Android開發(fā)中替換資源圖片不起作用的解決方法
這篇文章主要介紹了在Android開發(fā)中替換資源圖片不起作用的解決方法,需要的朋友可以參考下2014-07-07AndroidStudio3.6的卸載安裝,Gradle持續(xù)下載/Gradle Build失敗等問題
這篇文章主要介紹了AndroidStudio3.6的卸載安裝,Gradle持續(xù)下載/Gradle Build失敗等問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Android數(shù)據(jù)持久化之SQLite數(shù)據(jù)庫用法分析
這篇文章主要介紹了Android數(shù)據(jù)持久化之SQLite數(shù)據(jù)庫用法,結(jié)合實(shí)例形式分析了SQLite概念、功能、相關(guān)操作類與使用技巧,需要的朋友可以參考下2017-05-05edittext + listview 實(shí)現(xiàn)搜索listview中的內(nèi)容方法(推薦)
下面小編就為大家?guī)硪黄猠dittext + listview 實(shí)現(xiàn)搜索listview中的內(nèi)容方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03Flutter實(shí)現(xiàn)文本滾動高亮效果的示例講解
這篇文章主要介紹了如何利用Flutter時(shí)時(shí)渲染頁面從而達(dá)到文本滾動高亮的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03