Android 动态添加View布局

释放双眼,带上耳机,听听看~!

项目当中遇到了,RecycleView 嵌套RecycleView布局的需求来展示订单详情,都知道 这样都有滑动,点击事件的布局进行嵌套,你会有好多的BUG等着你去改。所以换了一下思路。采用动态添加布局的方式来避免这个问题。

不做不知道,做了其实也很简单,注意事项,都写在注释上 不在赘述。

java代码

package com.android.study;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Main extends Activity {
/** Called when the activity is first created. */
   /****
    * 功能:点击按钮动态增加view
    *
    * 学习 LayoutInflater的使用办法.
    *
    *
    *
    */
private Button buttonAdd1;
   private Button buttonAdd2;
   private LayoutInflater  layoutInflater;
   private LinearLayout mainLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//方法一:取得LayoutInflater
layoutInflater = getLayoutInflater();
//方法二:
        //layoutInflater = LayoutInflater.from(this);
        //方法三:
        //layoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
mainLayout = (LinearLayout)findViewById(R.id.layout01);
buttonAdd1 = (Button)findViewById(R.id.button1);
buttonAdd2 = (Button)findViewById(R.id.button2);
//给按钮增加监听事件
buttonAdd1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//根据LayoutInflater创建一个新的TextView,所以下面这一行代码不能放到外面事先生成.
TextView newTextView = (TextView)layoutInflater.inflate(R.layout.infater01,null);
newTextView.setText("卧槽,这都可以 ");
//查看每次生成的TextView是否相同
newTextView.setText(newTextView.getText() + "::hashCode " + newTextView.toString());
//把TextView加入的当前layout中,R.id.layout01 是主layout的xml里面的id,如果你没有,需要加上
mainLayout.addView(newTextView);
//再加一次看能否成功.不能成功,说明了addView 必须不相同.
            //((LinearLayout)findViewById(R.id.layout01)).addView(newTextView);
}
});
buttonAdd2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
layoutInflater.inflate(R.layout.infater02,mainLayout);
//可以重复添加,能明白其中的原因吧
layoutInflater.inflate(R.layout.infater02,mainLayout);
}
});
}
}

xml

main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
    <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="方法一"></Button>
    <Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="方法二"></Button>
</LinearLayout>

inf01

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="---------infater02--------" />

inf02

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="---------infater01--------" />

人已赞赏
Android文章

Android开发setBackgroundDrawable和setBackgroundColor的用法

2020-3-28 9:18:18

Android文章

Android WebView加载Html 乱码问题

2020-3-28 10:33:27

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索