#android #visibility #imagebutton
#Android #видимость #imagebutton
Вопрос:
Итак, я искал на форумах, как это сделать, но ничего, что я нашел, не сработало. Когда я вызываю setVisibility () на моей кнопке изображения, кнопка не изменяется. Ниже приведен мой код, который находится в методе onCreate, и обе кнопки отображаются при запуске приложения. Однако, если бы я жестко закодировал атрибут в XML-файл, видимость действительно изменилась. Есть идеи, почему это происходит?
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = new ImageButton(this);
btn1.setVisibility(GONE);
btn2 = new ImageButton(this);
btn2.setVisibility(GONE);
Комментарии:
1. используете ли вы View.GONE? Для разных классов могут быть константы с разным значением, содержащие пропавшее значение…
2. Да, определенно используется View. GONE просто импортировал это перечисление
Ответ №1:
Измените свой код на :
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (ImageButton)findViewById(R.id.btn1);
btn1.setVisibility(View.GONE);
btn2 = (ImageButton)findViewById(R.id.btn2);
btn2.setVisibility(View.GONE);
и измените свой main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<Button android:id="@ id/btn1" android:layout_width="100dip"
android:layout_height="40dip" android:text="btn1"/>
<Button android:id="@ id/btn2" android:layout_width="100dip"
android:layout_height="40dip" android:text="btn2"/>
</LinearLayout>
Комментарии:
1. да, это сделало свое дело. почему это сработало, когда я использовал findViewById (), а не другим способом? должен ли я всегда использовать этот метод с использованием findViewById для создания других объектов? Спасибо всем за помощь!
2. new ImageButton создает новую кнопку, а findViewById возвращает кнопку, которую вы определяете в макете .xml. Кнопка, которую вы видите на экране, — это кнопки, которые определяют в main.xml .
Ответ №2:
ВО-первых: вы должны использовать метод setVisibility следующим образом :
btn1.setVisibility(VIEW.GONE),// not setVisibility(GONE);
SECONDE:
вы создали свои кнопки, но you didn't add them to your activity
, ( содержимое вашего действия ( R.layout.main
)
попробуйте это :
super.onCreate(savedInstanceState);
btn1 = new ImageButton(this);
setContentView(btn1);
btn1.setVisibility(VIEW.GONE);
try{
Thread.sleep(3000);//pause 3 secondes
}catch(Exception e){}
btn1.setVisibility(View.VISIBLE);
Редактировать :
super.onCreate (сохраненное состояние установки);
LinearLayout layout = new LinearLayout(this);
ImageButton btn1 = new ImageButton(this);
ImageButton btn2 = new ImageButton(this);
layout.addView(btn1);
layout.addView(btn2);
setContentView(layout);
btn1.setVisibility(VIEW.GONE);
btn2.setVisibility(VIEW.VISIBLE);
try{
Thread.sleep(3000);//pause 3 secondes
}catch(Exception e){}
btn1.setVisibility(View.VISIBLE);
btn2.setVisibility(VIEW.GONE);
Комментарии:
1. итак, это заставило setvisibility работать, но при этом весь экран превращается в одну большую кнопку, которая появляется через 3 секунды. как я могу создать две отдельные кнопки, которые будут реагировать на setvisibility?
2. @jamherst : вы можете легко сделать это с помощью XML-макета, подобного ответу XTR . но если вы хотите добавить их с помощью кода, так что смотрите мою правку