【发布时间】:2015-11-22 22:42:20
【问题描述】:
在我的主要活动中,我想在布局中添加额外的 TextView 项目。我在MainActivity-createOn 中使用了以下代码(部分基于this post 和this answer):
LayoutInflater inflater = (LayoutInflater)getLayoutInflater();
View view = inflater.inflate(R.layout.activity_main, null);
GridLayout item = (GridLayout ) view.findViewById(R.id.main_grid);
final int N = 10; // total number of textviews to add
final TextView[] myTextViews = new TextView[N]; // create an empty array;
for (int i = 0; i < N; i++) {
// create a new textview
final TextView rowTextView = new TextView(this);
// set some properties of rowTextView or something
rowTextView.setText("This is row #" + i);
// add the textview to the linearlayout
item.addView(rowTextView);
// save a reference to the textview for later
myTextViews[i] = rowTextView;
}
setContentView(view);
主要活动的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity" >
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>
</android.support.design.widget.AppBarLayout>
<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_grid"
android:useDefaultMargins="true"
android:alignmentMode="alignBounds"
android:columnOrderPreserved="false"
android:columnCount="4"
>
<TextView
android:text="MainTitle"
android:textSize="32dip"
android:layout_columnSpan="4"
android:layout_gravity="center_horizontal"
android:id="@+id/textView1"
/>
<TextView
android:text="Email address:"
android:layout_gravity="right"
/>
<EditText
android:ems="10"
/>
<TextView
android:text="Password:"
android:layout_column="0"
android:layout_gravity="right"
/>
<EditText
android:ems="8"
/>
<Space
android:layout_row="4"
android:layout_column="0"
android:layout_columnSpan="3"
android:layout_gravity="fill"
/>
<Button
android:text="Next"
android:id="@+id/imageButton1"
android:layout_row="5"
android:layout_column="3"
/>
</GridLayout>
</android.support.design.widget.CoordinatorLayout>
但是,在运行代码时,不会将任何项目添加到主布局中。我没有看到任何其他项目。
最后,我想在网格布局(列和行)中动态添加项目,这些项目可能包含文本和图标,并且是可单击的(即我可以单击此网格视图/布局中的元素/无论如何,开始一个特定的行动。也许这是重要的信息......)
【问题讨论】:
-
你为什么选择
View view = inflater.inflate(R.layout.activity_main, null)而不是setContentView(R.layout.activity_main)?你在屏幕上看到你的布局了吗? -
我只是从示例中获取的。
setContentView(R.layout.activity_main)之前用相同的方法完成... -
首先,将
getSystemService(Context.LAYOUT_INFLATER_SERVICE)替换为getLayoutInflater(),这样您就得到了正确的LayoutInflater,配置为考虑您的样式和主题。然后,将您的addView()调用替换为将GridLayout.LayoutParams作为第二个参数的调用,指示您希望视图的位置。最后,如果需要,使用 Hierarchy View 或uiautomatorviewer查看您的TextViews的收盘位置。 -
不确定我是否可以关注你。在哪里可以找到将
GridLayout.LayoutParams作为第二个参数的调用?您是否建议我检查每个 android 类中的所有可能方法?我真的跟不上…… -
@Alex
addView(View)有一个采用 LayoutParams 的重载选项。