Как отключить кнопку Android?
Я создал макет, который содержит две кнопки: следующая и предыдущая. Между кнопками я создаю некоторые динамические представления. Поэтому, когда я впервые запускаю приложение, я хочу отключить кнопку "предыдущий", так как не будет никаких предыдущих представлений. Я также хочу отключить кнопку "Далее", когда нет больше представлений для отображения. Есть ли возможность отключить кнопки?

9 ответов:
вы пробовали это?
myButton.setEnabled(false);обновление: благодаря Гвен. Чуть не забыл, что
android:clickableможет быть установлен в вашем XML-макете, чтобы определить, может ли кнопка быть кликабельной или нет.
вы не можете включить или отключить его в своем XML (так как ваш макет установлен во время выполнения), но вы можете установить, можно ли его щелкнуть при запуске действия с помощью
android:clickable.
вы просто пишете одну строку кода в своей деятельности
Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(false);когда вы хотите включить ту же кнопку, просто напишите
Button btn = (Button) findViewById(R.id.button1); btn.setEnabled(true);
в Java, как только у вас есть ссылка на кнопку:
Button button = (Button) findviewById(R.id.button);включить/отключить кнопку, Вы можете использовать:
button.setEnabled(false); button.setEnabled(true);или:
button.setClickable(false); button.setClickable(true);так как вы хотите, чтобы отключить кнопку с самого начала, вы можете использовать .setEnabled (false); в методе onCreate. В противном случае, из XML, вы можете напрямую использовать:
android:clickable = "false"так:
<Button android:id="@+id/button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/button_text" android:clickable = "false" />
В моем случае,
myButton.setEnabled(false); myButton.setEnabled(true);работает нормально, и он включает и отключает кнопку, как это должно быть. Но как только состояние кнопки становится отключенным, оно никогда не возвращается к включенному состоянию снова, хотя оно доступно для клика. Я попытался сделать недействительным и обновить рисуемое состояние, но не повезло.
myButton.invalidate(); myButton.refreshDrawableState();Если у вас или у кого-то есть аналогичная проблема, то для меня работает установка фона, который можно снова нарисовать. Работает на любом уровне API.
myButton.setEnabled(true); myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable));
в Котлине, если вы ссылаетесь на вид кнопки с идентификатором, то включите / отключите кнопку как
макет.xml
<Button android:id="@+id/btn_start" android:layout_width="100dp" android:layout_height="50dp" android:text="@string/start" android:layout_alignParentBottom="true"/>активности.КТ
btn_start.isEnabled = true //to enable button btn_start.isEnabled = false //to disable button
сначала в xml сделайте кнопку как
android:clickable="false"<Button android:id="@+id/btn_send" android:clickable="false"/>тогда в вашем коде, внутри
oncreate()метод установите свойство кнопки какbtn.setClickable(true);затем внутри кнопки нажмите изменить код в
btn.setClickable(false); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); btnSend = (Button) findViewById(R.id.btn_send); btnSend.setClickable(true); btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); }
НЕПРАВИЛЬНЫЙ ПУТЬ В СЛУШАТЕЛЕ ИСПОЛЬЗОВАТЬ ПЕРЕМЕННУЮ ВМЕСТО ПАРАМЕТРА!!!
btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } });ПРАВИЛЬНО:
btnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /** check given view by assertion or cast as u wish */ if(v instance of Button) { /** cast */ Button button = (Button) v; /** we can perform some check up */ if(button.getId() == EXPECTED_ID) { /** disable view */ button.setEnabled(false) button.setClickable(false); } } else { /** you can for example find desired view by root view */ Button bt = (Button) v.getRootView().findViewById(R.id.btId); /*check for button */ if(bt!=null) { /** disable button view */ ... } else { /** according to @jeroen-bollen remark * we made assumption that we expected a view * of type button here in other any case */ throw new IllegalArgumentException("Wrong argument: " + "View passed to method is not a Button type!"); } } } });изменить: В ответ на @jeroen-bollen
View.OnClickListenerи определение интерфейса для обратного вызова, который будет вызван при нажатии на представление.
С определение метода
void onClick(View v);при нажатии на представление объект класса представления выполняет обратный вызов чтобы метод onClick () отправлял как сам параметр, поэтому параметр null view не должен возникать, если он это делает, это Ошибка Утверждения это может произойти, например, когда класс объекта View был уничтожен в то же время (например, собранный GC) или метод был изменен из-за взлома
немного о instanceof & null
JLS / 15.20.2. Введите оператор сравнения instanceof
во время выполнения, результат instanceof оператор-это правда если значение RelationalExpression не равно null и ссылка может быть приведена к типу ReferenceType не вызывая ClassCastException.
в противном случае результат равен false.
три слова от автора
ЕСЛИ ВЫ СПРОСИТЕ, ПОЧЕМУ ?
в основном, чтобы избежать NullPointerException
немного больше кода сэкономит ваше время позже отслеживание ошибок в вашем коде и уменьшает возникновение абномов.
рассмотрим следующий пример:
View.OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { btnSend.setClickable(false); } }); btnSend.setOnClickListener(listener) btnCancel.setOnClickListener(listener)
Comments