android:将视图扩展为布局

时间:2015-04-09 04:53:14

标签: android

我将一个由LayoutInflater夸大的视图添加到一个布局中,然后我更改了该视图的背景颜色,例如,红色变为蓝色。之后,我添加了一个新的视图,用相同的xml文件充气,进入相同的布局,但我得到一个背景颜色为蓝色的视图,而不是原始颜色红色。 这是测试代码:

public class InflateActivity extends Activity{


    private LinearLayout mContainer;
    private View view;

    @Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.inflate_test);
        mContainer = (LinearLayout)findViewById(R.id.inflate_container);
        findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
                mContainer.addView(view,2);
            }
        });
        findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view.setBackgroundColor(Color.BLUE);

            }
        });
    }
} 

我通过view.toString()得到了不同的id。 我无法弄清楚为什么。 我想知道为什么我对视图A进行了一些更改,并且使用相同的xml文件进行膨胀的视图B将受到这些更改的影响。 实际上,我对视图A进行了很多更改,但只有setBackgroundColor()会影响视图B. xml文件的根视图是FrameLayout.Other布局,如LinearLayout,RelativeLayout不会出现问题

3 个答案:

答案 0 :(得分:3)

我通过创建项目来检查您的代码。我正在使用Android Studio。我没有发现你提到的任何问题。只需查看我的代码并尝试相应地更改您的代码。

MainActivity:

public class MainActivity extends Activity {


private LinearLayout mContainer;
private View view;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    mContainer =  (LinearLayout)findViewById(R.id.inflate_container);
    findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view = LayoutInflater.from(MainActivity.this).inflate(R.layout.expanded_record,mContainer,false);
                mContainer.addView(view,mContainer.getChildCount());
            }
        });
        findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                view.setBackgroundColor(Color.BLUE);

            }
        });

}

主XML:

 <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"   android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"   tools:context=".MainActivity">

<LinearLayout
    android:id="@+id/inflate_container"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">



</LinearLayout>

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_margin="20dp">


    <TextView

        android:text="add" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:clickable="true"/>

    <TextView
        android:id="@+id/change_color"
        android:clickable="true"
        android:text="change_color" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

</RelativeLayout>

和我正在膨胀的XML

<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:background="#000000"
android:layout_gravity="center">


</View>

这是我得到的结果

看到我可以添加黑色视图并将其更改为蓝色,然后再将其更改为黑色

http://postimg.org/image/ggeotcz91/

答案 1 :(得分:0)

更改view.setBackgroundColor(Color.BLUE)后的

;背景将为蓝色。如果要在添加新视图时将其更改为红色,则需要更改

findViewById(R.id.change_color).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setBackgroundColor(Color.BLUE);//changes this view which clicked to blue

        }
    });

答案 2 :(得分:0)

从上面提供的代码段开始,因为您在添加时使用相同的膨胀视图,因此在添加时第二次查看背景为蓝色。如果要添加具有所有默认值的视图(您正在使用的布局“expanded_record.xml”),则必须在添加第二次时再次对其进行充气。简而言之,您应该使用默认条件来扩充“expanded_record.xml”次,您可以根据自己的要求对每个实例进行更改。

 view1 = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
 mContainer.addView(view1,2);

 view2 = LayoutInflater.from(InflateActivity.this).inflate(R.layout.expanded_record,mContainer,false);
 mContainer.addView(view2,3);