1

我需要在屏幕底部添加一个 textView 和 ImageView

我需要隐藏 textView 并以编程方式再次显示它

在这里,我有这张图片来解释问题以及应用程序的行为方式

左侧矩形显示显示的 TextView,第二个用于隐藏 Textview:

在此处输入图像描述

我尝试了下面的代码来做到这一点:

1-我向 ImageView 添加了单击侦听器,隐藏了 TextView 并更改了 ImageView 的 LayoutParams

2-再次单击它会显示 TextView 并在其上方对齐 ImageView

但问题是,当我运行代码时,ImageView 卡在屏幕顶部

我正在尝试使用以下代码务实地更改视图的 LayoutParams :

主要的.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView android:id="@+id/tv1 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

    <ImageView android:id="@+id/img" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignAbove="@id/tv1" />

</RelativeLayout>

和 MainActivity.java 类:

public class MainActivity extends Activity {

    TextView tv;
    ImageView image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        image = (ImageView) findViewById(R.id.img);
        tv = (TextView) findViewById(R.id.tv1);

        image.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                RelativeLayout.LayoutParams imageParams = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                //imageParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

                imageParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

                if(tv.getVisibility() == MyNavigationBar.GONE){
                    tv.setVisibility(MyNavigationBar.VISIBLE);


                    imageParams.addRule(RelativeLayout.ABOVE, R.id.bottomNavigationBar);

                    image.setLayoutParams(imageParams);

                } else {
                    tv.setVisibility(MyNavigationBar.GONE);

                    imageParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

                    image.setLayoutParams(imageParams);
                }
            }
        });

    }
}

我认为问题在于函数: imageParams.addRule(RelativeLayout.ABOVE, R.id.bottomNavigationBar);

但它不起作用

我还尝试将 Id 手动设置为 textView,例如:

tv.setId(1);

并将以前的更改为:

imageParams.addRule(RelativeLayout.ABOVE, tv1.getId());

也不适合我!!

我想知道是我的代码还是android SDK中的问题!

4

1 回答 1

5

似乎layout_alignWithParentIfMissing会容易得多:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

    <ImageView android:id="@+id/img" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignAbove="@+id/tv1"
        android:layout_alignWithParentIfMissing="true" />

</RelativeLayout>

并且只在您的代码中切换 tv1 的可见性:

image.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(tv.getVisibility() == View.GONE){
            tv.setVisibility(View.VISIBLE);
        } else {
            tv.setVisibility(View.GONE);
        }
    }
})
于 2013-06-25T13:36:24.287 回答