Android 버튼을 비활성화하는 방법은 무엇입니까?
Next(다음) 및 Previous(이전) 버튼 두 개가 포함된 레이아웃을 만들었습니다.버튼 사이에 동적 뷰가 생성됩니다.따라서 응용프로그램을 처음 시작할 때 이전 보기가 없으므로 "이전" 단추를 사용하지 않도록 설정합니다.표시할 보기가 더 이상 없을 때도 "다음" 단추를 사용하지 않도록 설정합니다.버튼을 비활성화할 방법이 있습니까?
이거 먹어봤어요?
myButton.setEnabled(false);
업데이트: 그웬 덕분입니다.하마터면 잊을 뻔 했어요.android:clickable
XML 레이아웃에서 단추를 클릭할 수 있는지 여부를 결정하도록 설정할 수 있습니다.
예. 다음을 사용하여 XML에서 비활성화할 수 있습니다.
<Button
android:enabled="false"
/>
레이아웃은 런타임에 설정되어 있으므로 XML에서 활성화하거나 비활성화할 수 없지만 활동 시작 시 클릭 가능한지 여부는 설정할 수 있습니다.
활동에서 코드 한 줄만 작성하면 됩니다.
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));
Kotlin에서 ID가 있는 버튼 보기를 참조할 경우, 다음과 같이 버튼을 활성화/비활성화합니다.
layout.xml
<Button
android:id="@+id/btn_start"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="@string/start"
android:layout_alignParentBottom="true"/>
활동.kt
btn_start.isEnabled = true //to enable button
btn_start.isEnabled = false //to disable button
코틀린과 함께라면
// to disable clicks
myButton.isClickable = false
// to disable button
myButton.isEnabled = false
// to enable clicks
myButton.isClickable = true
// to enable button
myButton.isEnabled = true
수신기에서 매개 변수 대신 변수를 사용하는 잘못된 방법!!!
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);
보기를 클릭하면 View 클래스 개체가 매개 변수로 Click()을 보낼 때 메서드에 콜백합니다. 따라서 null view 매개 변수가 발생하지 않아야 합니다. 이 매개 변수가 발생하면 Assertion 오류입니다. View 개체 클래스가 도중에 파괴되었거나(예: GC에서 수집됨) 해킹으로 인해 메서드가 손상되었을 수 있습니다.
&null의 인스턴스에 대한 정보가 거의.
JLS / 15.20.2.유형 비교 연산자 인스턴스(instance)
런타임에 관계식 값이 null이 아니며 ClassCastException을 발생시키지 않고 참조를 ReferenceType에 캐스팅할 수 있으면 연산자 인스턴스의 결과가 참입니다.
그렇지 않으면 결과가 거짓입니다.
저자의 세 마디 말
이유를 묻는다면요?
대부분 NullPointer를 피하기 위해 사용예외.
코드를 조금만 더 추가하면 코드에서 나중에 버그를 추적하는 데 걸리는 시간이 절약되고 이상이 발생하는 것을 줄일 수 있습니다.
다음 예를 고려합니다.
View.OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
btnSend.setClickable(false);
}
});
btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)
단추를 비활성화해야 할 경우 이 코드 줄을 추가합니다.
Button button = findViewById(R.id.button)
button.setEnabled(false);
그리고 활성화 버튼, 이 라인을 추가합니다.
button.setEnabled(true);
해피 코딩:d
을 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);
}
});
}
xml에서 단추를 사용하지 않도록 설정할 수 있지만 동적이지는 않습니다.버튼을 동적으로 비활성화하는 가장 좋은 방법은 다음과 같습니다.
myButton.setEnabled(false);
Java에서 setEnabled 메서드를 사용하면 됩니다.
myButton.setEnabled(false);
그리고 코틀린에서
myButton.enabled = false
언급URL : https://stackoverflow.com/questions/4384890/how-to-disable-an-android-button
'programing' 카테고리의 다른 글
Unix - 폴더 및 파일 경로 만들기 (0) | 2023.06.03 |
---|---|
루비 버전 2.0.0을 Mac OS X v10.10(요세미티)의 최신 버전으로 업데이트하려면 어떻게 해야 합니까? (0) | 2023.06.03 |
Rspec의 should_raise를 예외적으로 사용하는 방법은 무엇입니까? (0) | 2023.06.03 |
UITableView beginUpdates/endUpdates에서 애니메이션이 종료되었음을 감지하는 방법은 무엇입니까? (0) | 2023.06.03 |
오류 - SqlDateTime 오버플로입니다.1/1/1753 오전 12:00 ~ 12/31/9999 오후 11:59:59 사이여야 합니다. (0) | 2023.05.29 |