【问题标题】:Programmatically adding items to relative layout以编程方式将项目添加到相对布局
【发布时间】:2012-09-13 05:26:52
【问题描述】:

我有一个具有以下 xml 的相对布局:

<RelativeLayout
    android:id="@+id/date_bar_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/navigation_bar_layout"
    android:background="@color/light_gray"
    android:gravity="center">

    <TextView
        android:id="@+id/detaildatetextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text=""
        android:textColor="@color/black"
        android:textSize="20dp"
        android:textStyle="bold" />
</RelativeLayout>

如您所见,它已经有一个文本视图。在我的代码中的某个地方,我需要在文本视图之前以编程方式添加图像。这意味着首先显示图像,然后显示文本视图。但是当我执行代码时会显示图像,而文本视图则不会。请帮我解决这个问题。我的实现如下:

image  = new ImageView(getApplicationContext());
image.setId(0);
dateText = (TextView) dateBarLayout.findViewById(R.id.detaildatetextview);
dateText.setText("Dummy text");
RelativeLayout.LayoutParams params = (LayoutParams) dateBarLayout.getLayoutParams();
params.addRule(RelativeLayout.LEFT_OF, dateText.getId());                       
String icon = "drawable/"+ path;
icon = icon.replaceAll("-", "_");
icon = icon.toLowerCase();
int imageResource = this.getApplicationContext().getResources().getIdentifier(icon, null,this.getApplicationContext().getPackageName());
image.setImageResource(imageResource);
dateBarLayout.addView(image);

我不知道我哪里出错了。请帮助我摆脱困境。在此先感谢...:-)

【问题讨论】:

  • 你想显示图片和图片顶部的文字吗?
  • 不,我想先显示图像,然后显示文本……简单地说,从左到右图像,然后是文本。
  • @UsamaSarwar 请看我的回答,它会解决你的问题。

标签: android android-layout android-relativelayout


【解决方案1】:

你需要为正在添加的视图设置布局参数,将其放置在相对布局中,否则会重叠,布局中的左上视图,所以使用http://developer.android.com/reference/android/view/ViewGroup.html#addView(android.view.View, android.view.ViewGroup.LayoutParams)方法添加而不是addView(View)要布局的视图。因此,将您的代码更改为以下内容:

image  = new ImageView(getApplicationContext());
    image.setId(0);

    dateText = (TextView) dateBarLayout.findViewById(R.id.detaildatetextview);

    dateText.setText("Dummy text");



        RelativeLayout.LayoutParams params = (LayoutParams) dateBarLayout.getLayoutParams();
    params.addRule(RelativeLayout.LEFT_OF, dateText.getId());

        String icon = "drawable/"+ path;
        icon = icon.replaceAll("-", "_");
            icon = icon.toLowerCase();

        int imageResource = this.getApplicationContext().getResources().getIdentifier(icon, null,this.getApplicationContext().getPackageName());

        image.setImageResource(imageResource);
                    dateBarLayout.addView(image, params);

【讨论】:

    【解决方案2】:

    setcontentview(R.layout.main);之后将下面的代码添加到你的java文件中,它会解决你的问题。

    ImageView image = new ImageView(this);
    RelativeLayout dateBarLayout=(RelativeLayout)findViewById(R.id.date_bar_layout);
    TextView dateText = (TextView) dateBarLayout.findViewById(R.id.detaildatetextview);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.LEFT_OF, dateText.getId());
    image.setLayoutParams(params);
    image.setImageResource(R.drawable.ic_launcher);
    dateBarLayout.addView(image);
    

    【讨论】:

      【解决方案3】:
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
      <RelativeLayout
      android:id="@+id/Rl"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      >
      
      
      
       <Button
          android:id="@+id/button2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginLeft="10dip"
          android:gravity="left"
          android:onClick="addAddbutton"
          android:text="add"
          android:visibility="visible" />
      
      </RelativeLayout>
      </RelativeLayout>
      
      
      mainActivity.java
      
      package com.example.textboxonclick;
      
      import android.app.Activity;
      import android.os.Bundle;
      import android.view.View;
      import android.widget.EditText;
      import android.widget.RelativeLayout;
      
      public class MainActivity extends Activity {
      
      private RelativeLayout Rl;
      private EditText myEditText;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      ln = (RelativeLayout) findViewById(R.id.Rl);
      
       }
       public void addAddbutton(View v) {
       myEditText = new EditText(this);
       Rl.addView(myEditText);
      }
      }
      

      【讨论】:

      • 请在您的答案中添加一些文字。您在代码中进行了哪些更改以解决问题中的问题?你能用几句话解释为什么这是必要的吗?
      • 亲爱的,这很简单,我们在相对布局中有一个按钮,点击该按钮只需在相对布局中添加一个editText。
      猜你喜欢
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2019-09-04
      • 2013-07-06
      • 1970-01-01
      • 2013-07-05
      • 2016-07-29
      • 2013-05-03
      相关资源
      最近更新 更多