创建多个视图

时间:2016-07-17 15:15:20

标签: android android-linearlayout relativelayout

我试图多次给视图充气。 我的视图包含一个图像视图和一个位于其下方的文本视图,并将其放置在特定位置。

以下是我多次充气的 item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="100dp"
    android:background="@android:color/holo_blue_dark"
    android:layout_height="100dp">

    <ImageView
        android:layout_gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="@mipmap/ic_launcher"
        android:id="@+id/imageView"/>

    <TextView
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:textSize="12sp"
        android:textStyle="bold"
        android:text="Large Text"
        android:id="@+id/textView" />
</LinearLayout>

这是我的扩充代码:

for (int i = 0; i < 1; i++) {

    final View v = linf.inflate(R.layout.item, null);
    TextView tvs = (TextView) v.findViewById(R.id.textView);
    ImageView ivs = (ImageView) v.findViewById(R.id.imageView);
    tvs.setText(i+"");

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(100, 100);

    int w = (mWidth/2)-50;
    int h =(mHeight/2)-50;
    params.leftMargin = w;
    params.topMargin = h;
    Log.e("W-H", mWidth + "-" + mHeight);
    rr.addView(v,params);
}

我能够成功放置 item.xml 但是它的设置不合适我已将高度和宽度设置为100dp。

这是我得到的 here

1 个答案:

答案 0 :(得分:0)

LayoutParams的构造函数以像素为单位,因此您必须转换为dps才能在屏幕上正确显示。这可以在this stackoverflow answer中完成:

int width_dps = 100;
int height_dps = 100;
final float scale = MainActivity.this.getResources().getDisplayMetrics().density;
int width_pixels = (int) (width_dps * scale + 0.5f);
int height_pixels = (int) (height_dps * scale + 0.5f);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width_pixels, height_pixels);

或者,如果您使用固定大小,则可以更新xml以允许wrap_content正常工作。您将覆盖LinearLayout参数,以便更新子视图:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

并更新子视图(android:layout_width="100dp"):

<TextView
    android:gravity="center"
    android:layout_width="100dp"
    android:layout_height="20dp"
    android:textSize="12sp"
    android:textStyle="bold"
    android:text="Large Text"
    android:id="@+id/textView" />