以编程方式设置Android组件

时间:2017-08-23 10:19:52

标签: android android-linearlayout

我有一个像下面的xml。

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">

<LinearLayout
    android:id="@+id/etMsisdn"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <LinearLayout
        android:id="@+id/allView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <EditText
            android:id="@+id/msisdn"
            android:layout_marginRight="4dp"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:backgroundTint="@color/colorPrimaryDark"
            android:hint="MSISDN"
            android:inputType="numberDecimal"
            />
        <ImageView
            android:layout_width="60px"
            android:layout_height="match_parent"
            android:src="@drawable/scan"/>
    </LinearLayout>
</LinearLayout>
............
Another View
............
</LinearLayout>

如何在水平LinearLayout(allView)中以编程方式添加EditText和ImageView,并在Vertical LinearLayout(etMsisdn)中添加allView,同时保持与xml中相同的属性。

EditText和ImageView r应该在msisdn edittext

下面

The EditText and ImageView r supposed to below the msisdn edittext

4 个答案:

答案 0 :(得分:0)

你需要获得对最外面的<LinearLayout android:id="@+id/myContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> (你的布局中的第一个)的引用,所以最好的想法是给它一个Id:

LinearLayout containerLayout = (LinearLayout)findViewById(R.id.myContainer);
containerLayout.addView(yourView1);
containerLayout.addView(yourView2);

然后,您需要获得对此布局的引用并添加子视图,如下所示:

LayoutParams

要设置所需的布局对齐方式,您可以手动设置所需的EditText(请参阅this answer in SO),也可以对布局进行充气并将其添加到当前布局,而不是两个单独的视图( ImageViewimport { InMemoryDbService, RequestInfo } from 'angular-in-memory-web-api'; import { ResponseOptions } from '@angular/http'; export class InMemoryDataService implements InMemoryDbService { myData = 'any data'; createDb() { let myData = this.myData; return {myData}; } protected responseInterceptor(res: ResponseOptions, ri: RequestInfo): ResponseOptions { res.body = this.myData; return res; } })(见this answer in SO)。

答案 1 :(得分:0)

这是你的解决方案

LinearLayout allview=(LinearLayout)findViewById(R.id.allView);

EditText edt=new EditText(this);
ImageView img=new ImageView(this);
allview.addView(edt);
allview.addView(img);

将此内容放入您的活动中

答案 2 :(得分:0)

您必须在布局对象上使用addView方法。 但是,如果要在主布局中添加更多相同的“子布局”,最好使用“子部件”创建xml布局并以编程方式添加它。如果第二种情况是您需要提供的代码,请告诉我。

答案 3 :(得分:0)

查找LinerLayout并添加观看次数:

LinearLayout root = (LinearLayout)findViewById(R.id.allView);
root.addView(someView);

并在您的视图中添加如下属性:

How to programmatically set textview-s and their properties?