【问题标题】:How to make Views with an Invisible attribute 'Visible' after clicking a button单击按钮后如何使具有不可见属性“可见”的视图
【发布时间】:2023-04-10 01:28:01
【问题描述】:

我有几个视图、文本视图和一个具有 android:visibility="invisible" 属性的按钮。我的目标是单击位于这些“不可见”小部件上方的按钮,以便这些小部件变得可见。我创建了另一个名为“VisibilityActivity.java”的java类并尝试了以下方法。但由于某种原因,当我运行应用程序时,按钮没有做任何事情。我不知道我错过了什么。

代码如下:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class VisibilityActivity extends Activity {

    private View mVictim;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_property3);

        mVictim = findViewById(R.id.horizontalRule1);
        mVictim = findViewById(R.id.TextView03);
        mVictim = findViewById(R.id.horizontalRule2);

        Button submitRating = (Button) findViewById(R.id.submitRatingButton);

        submitRating.setOnClickListener(mVisibleListener);

    }

    OnClickListener mVisibleListener = new OnClickListener() {
        public void onClick(View v) {
            mVictim.setVisibility(View.INVISIBLE);
        }
    };

}

这里是xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/custom_background"
android:isScrollContainer="true"
android:orientation="vertical"
android:paddingTop="10dp" >

    <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_gravity="center"
    android:text="@string/ratingsInfo"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/black1" />

    <View 
    android:layout_width="fill_parent" 
    android:layout_height="2dp"
    android:background="@color/black1"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:layout_marginBottom="5dp" />

    <TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:text="@string/yourRating"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/black1" />

    <RatingBar
    android:id="@+id/ratingBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp" />

    <Button
    android:id="@+id/submitRatingButton"
    android:layout_width="275dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp"
    android:background="@drawable/custom_button"
    android:text="@string/submitRating"
    android:textColor="@color/black1" />


    <View 
    android:id="@+id/horizontalRule1"
    android:layout_width="fill_parent" 
    android:layout_height="2dp"
    android:background="@color/black1"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:layout_marginBottom="5dp"
    android:visibility="invisible" />

    <TextView
    android:id="@+id/TextView03"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:layout_gravity="center"
    android:text="@string/summaryInfo"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/black1"
    android:visibility="invisible" />

    <View 
    android:id="@+id/horizontalRule2"
    android:layout_width="fill_parent" 
    android:layout_height="2dp"
    android:background="@color/black1"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:layout_marginBottom="5dp"
    android:visibility="invisible" />

    <TextView
    android:id="@+id/TextView01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:text="@string/ourRating"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/black1"
    android:visibility="invisible" />

    <RatingBar
    android:id="@+id/ratingBar2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:stepSize=".01"
    android:layout_marginBottom="10dp"
    android:visibility="invisible" />

    <TextView
    android:id="@+id/TextView02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:text="@string/overallRating"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@color/black1"
    android:visibility="invisible" />

    <RatingBar
    android:id="@+id/ratingBar3"
    android:color="@color/black1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:stepSize=".01"
    android:layout_marginBottom="40dp"
    android:visibility="invisible" />

    <Button
    android:id="@+id/saveContinueButton3"
    android:layout_width="275dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="15dp"
    android:background="@drawable/custom_button"
    android:text="@string/saveContinue"
    android:textColor="@color/black1"
    android:onClick="onSaveAndContinue3Clicked"
    android:visibility="invisible" />

</LinearLayout>
</ScrollView>

谢谢。非常感谢您的帮助!

【问题讨论】:

    标签: java android eclipse button visibility


    【解决方案1】:
    findViewById(R.id.ratingBar3).setVisibility(View.VISIBLE);
    findViewById(R.id.saveContinueButton3).setVisibility(View.VISIBLE);
    

    你让它不可见视图再次不可见..试试上面的代码

    【讨论】:

    • 是的,那是因为我正在尝试相反的方式,看看它是否有效。对于那个很抱歉。但是还是不行……
    【解决方案2】:

    试试

    public class VisibilityActivity extends Activity {
    
    private TextView mText;
    private View mRule1, mRule2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_property3);
    
        mText= (TextView)findViewById(R.id.horizontalRule1);
        mRule1 = findViewById(R.id.TextView03);
        mRule2 = findViewById(R.id.horizontalRule2);
    
        Button submitRating = (Button) findViewById(R.id.submitRatingButton);
    
        submitRating.setOnClickListener(mVisibleListener);
    
    }
    
    OnClickListener mVisibleListener = new OnClickListener() {
        public void onClick(View v) {
            mText.setVisibility(View.VISIBLE);
            mRule1.setVisibility(View.VISIBLE);
            mRule2.setVisibility(View.VISIBLE);
        }
    };
    
    }
    

    【讨论】:

    • 还是什么都没有。我认为它与 onClickListener 或其他东西有关。当我单击按钮时,它仍然完全没有任何作用。
    【解决方案3】:

    我正在更新 user936414 的答案。

    OnClickListener mVisibleListener = new OnClickListener() {
        public void onClick(View v) {
    
            if( mText.getVisibility() == View.INVISIBLE )
                mText.setVisibility(View.VISIBLE);
            else
                mText.setVisibility(View.INVISIBLE);
    
            if( mRule1.getVisibility() == View.INVISIBLE )
                mRule1.setVisibility(View.VISIBLE);
            else
                mRule1.setVisibility(View.INVISIBLE);
    
            if( mRule2.getVisibility() == View.INVISIBLE )
                mRule2.setVisibility(View.VISIBLE);
            else
                mRule2.setVisibility(View.INVISIBLE);
        }
    };
    

    您可能还想尝试 View.GONE。

    【讨论】:

    • 我也试过这个,但没有运气:(我认为问题与按钮有关。当我点击它时没有任何反应。不确定问题是什么......
    • 你可以放一个日志并检查当你点击按钮时你的监听器是否被调用?
    • 似乎没有什么异常。当我按下按钮时,Logcat 没有接收到任何东西。这可能是班级的问题吗?我不应该使用 Activity 吗?
    • 好的,现在是一个非常基本的问题,您提供的 xml 是否与您使用 setContentView(R.layout.new_property3) 设置的 xml 相同?即,上面提供的xml是不是叫new_property3?
    • 这个类看起来不错,似乎当您启动此活动时,屏幕将包含 ure xml 提供的视图,您应该可以单击按钮并注册。你能提供全班吗?只是为了确保其他内容不会覆盖上面代码中的内容。
    【解决方案4】:
    Button submitRating = (Button) findViewById(R.id.submitRatingButton);
            submitRating.setOnClickListener(new View.onClickListener)
            {
                 @Override
             public void onClick(View v) 
                {
                                  //Insert your code here
                        }
            }
    

    【讨论】:

    • 这是一个老问题,似乎已经解决了。您的答案添加了什么也不是很清楚; OP 在询问之前已经有了这个样板代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2016-08-21
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多