2011-03-17 6 views
3

performClick을 호출하여 코드의 Button의 OnClickListener.onClick을 수동으로 트리거 할 수 있다는 것을 알았지 만 클릭 한대로 시각적으로 나타나지 않는 것 같습니다. 단추를 클릭 한 것처럼 수동으로 단추를 표시하는 방법을 찾고 있습니다. 백그라운드 Drawable을 수동으로 변경하고 Handler.postDelayed 호출에서 다시 무효화 (또는 다시 다시 변경)해야합니까, 아니면이 작업을 수행하기위한 더 많은 프레임 워크가 있습니까?Android : Button.performClick의 비주얼 버전

편집

나는 버튼은 사용자가 언론을 시작할 때 누르면 나타나는 다른 드로어 블을 만드는 방법을 알고. 문제는 다음과 같습니다.

사용자가 실제로 누르지 않았을 때 프로그램 방식으로 버튼을 누르는 간단한 방법이 있습니까?

솔루션

나는 단지 서브 클래스 버튼과 버튼 인식이 눌러 진 상태로 사용되는 StateListDrawable과 드로어 블 정상 배경의의했다. 수동으로 배경을 "눌린"드로어 블에 설정하는 메서드를 노출합니다. Handler.postAtTime을 사용하여 정상적인 배경으로 돌아가므로 작업이 완료되면 다시 일반 단추로 사용할 수 있습니다.

답변

0

예, 드로어 블을 2 개 생성해야합니다. 하나는 눌린 상태이고 다른 하나는 정상 상태입니다.

그럼 당신은 같은 XML을 생성해야합니다 :

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/focused_drawable" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/unfocused_drawable" /> 
</selector> 

장소 당신의 당김 폴더 안에이 XML을. 당신은 또한 당신의 활동에 의해 사용되는 레이아웃 내부 그리고

android:state_focused="true" 

으로 집중 상태를 추가 할 수 있습니다, 당신의 버튼 태그 안에 제공 :

android:background="@drawable/your xml file name" 
+0

그건 질문이 아닙니다. 단추 상태에 다른 drawable을 사용하는 방법을 알고 있습니다. 질문은 : 코드에서 일시적으로 (눌렀을 때처럼) 버튼이 눌려진 상태로 보이게하려면 어떻게해야합니까? 단추를 눌렀을 때와 같이 보이게 만들고 싶습니다. 코드에서이를 수행 할 수 있기를 원합니다 (단추가 실제로 사용자에 의해 눌려 졌을 때뿐만 아니라). – Rich

+0

난 그냥 "수동"모양을 시뮬레이션하기 위해 배경을 설정 한 다음 핸들러를 사용하여 타이머를 사용하여 단추를 일반 StateListDrawable로 다시 설정했습니다. 관심이있는 경우 솔루션이 위에 게시됩니다. – Rich

4

을이 질문은 아주 오래된이지만, 나는거야 생각 여전히 대답 해. 보기를 하위 클래스로 만들 필요가 없습니다. 먼저 performClick()으로 전화하면 시각적 신호가 오래 걸리지 않지만 view.setPressed(true);을 통해 버튼의 눌림 상태를 설정 한 다음 이처럼 몇 밀리 초 후에 재설정 할 수 있습니다.

handler.postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     view.setPressed(false); 
    } 
}, 100);