programing

Android 버튼을 비활성화하는 방법은 무엇입니까?

newstyles 2023. 6. 3. 08:17

Android 버튼을 비활성화하는 방법은 무엇입니까?

Next(다음) 및 Previous(이전) 버튼 두 개가 포함된 레이아웃을 만들었습니다.버튼 사이에 동적 뷰가 생성됩니다.따라서 응용프로그램을 처음 시작할 때 이전 보기가 없으므로 "이전" 단추를 사용하지 않도록 설정합니다.표시할 보기가 더 이상 없을 때도 "다음" 단추를 사용하지 않도록 설정합니다.버튼을 비활성화할 방법이 있습니까?

샘플 레이아웃의 스크린샷

이거 먹어봤어요?

myButton.setEnabled(false); 

업데이트: 그웬 덕분입니다.하마터면 잊을 뻔 했어요.android:clickableXML 레이아웃에서 단추를 클릭할 수 있는지 여부를 결정하도록 설정할 수 있습니다.

예. 다음을 사용하여 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