【问题标题】:how to set visibility options of android.widget.textview如何设置 android.widget.textview 的可见性选项
【发布时间】:2013-12-07 22:26:08
【问题描述】:

对此有 FC 问题

private TextView msg, NameOut, DateOut;
msg = (TextView) findViewById(R.id.txtviewOut) ;

下线...(问题出在此处)

msg.setVisibility(View.INVISIBLE);//set visibility to false on create

如何在应用启动时将此 TextView (msg) 的可见性设置为 false?

#1 答案编辑后更新

好了,代码就到这里了:

fragment_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity$PlaceholderFragment">

    <EditText
        android:id="@+id/textenter"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_below="@+id/lbledt1"
        android:layout_alignParentLeft="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enter Name"
        android:id="@+id/lbledt1"
        android:layout_marginTop="26dp"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enter your date of birth (e.g. xx July 19xx)"
        android:id="@+id/textView"
        android:layout_below="@+id/textenter"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="57dp" />

    <EditText
        android:id="@+id/editText"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Press this button"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="You have been awesome since"
        android:id="@+id/txtviewOut"
        android:layout_marginTop="86dp"
        android:textIsSelectable="false"
        android:layout_below="@+id/button"
        android:layout_centerHorizontal="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/txtoutName"
        android:textIsSelectable="false"
        android:layout_alignBottom="@+id/txtviewOut"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="41dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/txtOutDate"
        android:layout_marginTop="28dp"
        android:textIsSelectable="false"
        android:layout_below="@+id/txtviewOut"
        android:layout_centerHorizontal="true" />

MainActivity.java:



 package com.example.helloandroidstudio;

    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.app.ActionBar;
    import android.support.v4.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.os.Build;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;

    public class MainActivity extends ActionBarActivity {

        private Button btnClick;
        private EditText Name, Date;
        private TextView msg, NameOut, DateOut;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            btnClick = (Button) findViewById(R.id.button) ;
            Name = (EditText) findViewById(R.id.textenter) ;
            Date = (EditText) findViewById(R.id.editText) ;
            msg = (TextView) findViewById(R.id.txtviewOut) ;
            NameOut = (TextView) findViewById(R.id.txtoutName) ;
            DateOut = (TextView) findViewById(R.id.txtOutDate) ;

    //        msg.setVisibility(View.GONE);//set visibility to false on create
            if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment())
                        .commit();
            }
        }

        public void onClick(View v)
        {
            if (v == btnClick)
            {
                if (Name.equals("") == false && Date.equals("") == false)
                {
                    NameOut = Name;
                    DateOut = Date;
                    msg.setVisibility(View.VISIBLE);
                }
                else
                {
                    msg.setText("Please complete both fields");
                    msg.setVisibility(View.VISIBLE);
                }
            }

        }


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {

            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            switch (item.getItemId()) {
                case R.id.action_settings:
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }

        /**
         * A placeholder fragment containing a simple view.
         */
        public static class PlaceholderFragment extends Fragment {

            public PlaceholderFragment() {
            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                return rootView;
            }
        }

    }

我用 setInvisibility(View.GONE) 试过了,但还是 FC

我检查了 id 值,分配了一个辅助值,我确实对对象进行了类型转换...

请记住,我做过 c#,但这是我的第一个 java/android 应用,所以请多多包涵

【问题讨论】:

  • 它应该可以工作,或者您正在使用其他 resId 找到另一个视图,请放置 Layout xml 代码。您可以将可见性更改为 INVISIBLE 或 GONE 以隐藏 TextView
  • 请发布 LogCat 错误。
  • if (Name.equals("") == false &amp;&amp; Date.equals("") == false) 改为if (Name.getText().equals("") == false &amp;&amp; Date.getText().equals("") == false)

标签: android textview android-studio visibility


【解决方案1】:

我有点怀疑你到底想完成什么,但我会尝试澄清一些概念

如果你想完全隐藏你的视图然后使用 Visibility.Gone 或者如果你想隐藏它但想保留这个地方然后使用 Visibility.Invisible

msg.setVisibility(View.INVISIBLE); // for hiding but keeping the place of your view 

msg.setVisibility(View.GONE);// for  hiding it completely , view will not take any place 

【讨论】:

    【解决方案2】:

    将其设置为布局中的默认值。

    <TextView
        android:id="@+id/txtviewOut"
        ...
        android:visibility="invisible" />
    

    更新:

    如果你总是需要它从隐形开始,这就是要走的路。请注意,“不可见”意味着它不显示但在渲染时仍会占用空白空间。如果您希望它折叠起来(不占用任何空间,不显示),请在代码中使用 View.GONE 或在布局中使用 android:visibility="gone"

    如果在 View 上调用 setVisibility 会导致 FC,那很可能是空指针异常(请检查 LogCat 以确保)。如果是这种情况,您要么尚未调用 findViewById,要么您的布局不包含该 id 的视图。

    更新 #2:

    首先,您应该始终查看 LogCat 并获取引发的确切异常以及引发异常的确切行。我愿意打赌它发生在这条线上:

                    NameOut = Name;
                    DateOut = Date;
    

    您正在尝试将 TextView 类型的变量设置为 EditText 类型的值。我假设您正在尝试将 TextView 的文本设置为 EditText 中文本的值。这样做如下:

    NameOut.setText(Name.getText().toString());
    DateOut.setText(Date.getText().toString());
    

    【讨论】:

    • 在程序的后面,如何让它再次可见?
    • msg.setVisibility(View.VISIBLE);如果在执行此代码时强制关闭,请检查它。这应该崩溃的唯一原因是当它不在布局中或尚未解决它时您正在访问它。
    • 好的,我把所有的代码都贴出来了,你认为什么会导致错误
    【解决方案3】:

    你已经实现了一个

    onClick(View v) 
    

    方法,但未与布局中的 Button 连接。

    在布局 xml 文件中设置属性 android:onClick="onClick"

    现在,您的按钮单击未注册,方法未执行

    【讨论】:

      【解决方案4】:

      Kotlin 中这样做:

      <Text android:visibility="gone"/>
      

      如果您总是需要它从隐形开始,这就是要走的路。请注意,“invisible”表示它不显示,但在渲染时仍会占用空白空间。如果你想让它折叠起来(不占用任何空间,不显示),那么在代码中使用View.GONE

      可见性:

      text.Visibility = View.Visible
      

      离开:

      text.Visibility = View.Gone
      

      (As Gone 不会使用您在main_activity.xml 中的空间。 它仅在设置为可见时才占用空间。)

      【讨论】:

        猜你喜欢
        • 2021-10-16
        • 2014-08-23
        • 2023-03-18
        • 2012-08-24
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2010-12-09
        • 2011-03-29
        相关资源
        最近更新 更多