스마트기기개발관련/안드로이드 개발

안드로이드 컨트롤 포커스 표시관련 (리스트, 버튼 등등)

AlrepondTech 2020. 9. 21. 01:20
반응형

 

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

 

출처: http://202psj.tistory.com

* 커스텀 리스트를 만들때 포커스 표시가 레이아웃에 가려서 색깔이 안보이는 경우가 있는데 이경우

<ListView

          ....

          android:drawSelectorOnTop = "true" or "false"/>



ListView _list;

_list.setDrawSelectorOnTop(true);

* 리스트의 포커스 표시 색깔을 변경하고 싶을때

_list.setSelector(new PaintDrawable(0x5000ff00));

0x5000ff00 <- 초록색 투명색

위에 코드처럼 해주면 레이아웃 위에 포커스 표시가 나타나게 된다.

포커스가 레이아웃에 가려 안보이거나 포커스 색깔을 변경하고 싶을때 위 두가지를 적용하면 되겠다.

 

 

=================================

=================================

=================================

 

 

출처: http://idroid.tistory.com/8

<ListView

          android:drawSelectorOnTop = "true" or "false"

/>

 

위의 옵션은

리스트중에 사용자가 선택을 했을때, 선택된 아이템 위에

아이템을 뒤덮는(?) 화면을 연출할지 말지를 선택한다.

(default는 false)

실제 테스트결과 어차피 클릭할때 주황색으로 표시가 되는데,

true로 할 경우 선택된 아이템의 글씨가 보이지 않게 되서

오히려 false가 더 낫다는 느낌이 들었다.

(뭐.. 그냥 그렇다고..)

관련 매소드는 다음과 같다.

 

안드로이드 그림 넣는  폴더 부분에서 버튼 이벤트로 나타내는 리소스를 작성하고자 할때.

blackbtn_no1,blackbtn_no2,blackbtn_no3 은 각각 이미지 폴더에 있는 png 파일이라고 가정하자. (폴더: drawable-hdpi)

 //버튼의 상태 enable가 false 상태일때 blackbtn_no1 의 이미지를 보여준다 

 <item android:state_enabled="false"  android:drawable="@drawable/blackbtn_no1" /> 

//버튼이 누른 상태일때 blackbtn_no2의 이미지를 보여준다.

<item anroid:state_pressed="true" android:drawable="@drawable/blackbtn_no2" />

//버튼이 누른 상태가 아닐때 blackbtn_no3의 이미지를 보여준다.

<item android:state_pressed="false" android:drawable="@drawable/blackbtn_no3" />

 

 

=================================

=================================

=================================

 

 

 

출처: http://www.androidpub.com/15015

 

textview pressed ,focused 상태일때 색상 변경

쩡이

http://www.androidpub.com/15015

2009.07.06 18:13:57

5449


textview 의 property 중 clickable와 focusable 를 모두 true로 설정하면
pressed상황에서 색상이 어둡게 변하는것을 확인하였습니다.

그래서 xml을 생성후 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:drawable="@drawable/textnomalcolor" />

 <item android:state_pressed="true" android:drawable="@drawable/textpresscolor" />

 <item android:state_pressed="false" android:drawable="@drawable/textnomalcolor" />

 <item android:state_focused="true" android:drawable="@drawable/textfocuscolor" />

 <item android:state_focused="false" android:drawable="@drawable/textnomalcolor" />

</selector>


property중 Text appearance 에 설정해주었더니~
그저 위의 pressed 상황이였던 어두운 색상으로 변하여 아무 작동을 하지 않았습니다.

몇가지 변경을 주어보았습니다.
focusable와 clickable을 true false 중 여러가지 상황에 맞추어 보았지만 여전 히 동작을 하지 않았습니다.

회색님 도와주세요~
그리고 clicked상황 pressed상황 focused상화 checked상황이 있는것으로 알고 있는데요~
여러 뷰마다 다르다고 하더군요~
설명좀 부탁드립니다.

위의 택스트 뷰를 사용하는 이유는 리스트를 클릭시에 변경하고 싶어서 입니다.
클릭상태에서 리스트를 벗어나면 클릭상태가 뮤효가 되는것도 포함하고 싶습니다.

 

목록

엮인글 주소 : http://www.androidpub.com/index.php?document_srl=15015&act=trackback&key=ae2

 

2009.07.07 13:10:53

회색

현재 말씀하시는 사항이 잘 이해도 안가구요. 저도 그런 status의 자세한 부분까지 모두 알고 있지는 못합니다. 직접 테스트해보시고 저한테도 좀 알려주세요 ㅡ.ㅡ

 

2009.07.07 13:27:07

쩡이

정말 어처구니 없게도~~

xml을 textview의 Text appearanc가 아니라

         Text color의 reference로 주었어야 했습니다.~ㅠㅠ

아직 리스트 까지는 못해보았지만 textview에서 가능하네요~

저는 pressed 상황만 필요하여 xml을 이렇게 수정하였습니다.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item android:drawable="@drawable/textnomalcolor" />

 <item android:state_pressed="true" android:drawable="@drawable/textpresscolor" />

 <item android:state_pressed="false" android:drawable="@drawable/textnomalcolor" />

</selector> 


그리고 pressed 를 위하여 clickable을 true로 해주었습니다.
 focusable 현재는 상관없으므로 아무 설정해주지 않았습니다.

참고로 이 xml은 res의 drawable에 들어가야 옳겠지요~

 

 

 

반응형

 

728x90

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=kippee&logNo=130072192797

 

 

 

 

 

ListView 에서 현재 선택되어 있는 Item은 오랜지 색깔의 배경색으로 HighLight 되어 있다.
이는 오랜지에서 제공하는 기본적인 배경색이며 이를 바꿀수 있는 방법은 
ListView 의 Super Class인 AbsListView 의 setSelector 메소드를 이용하여 바꿀수 있다고 한다.

 

 

그럼 setSelector를 특정색깔로 바꾸어서

 하면 어떻게 될까?
아래와 같이 Coding 한후

xxxxListView 중

  this.setSelector(Color.RED);
  this.setDrawSelectorOnTop(false);


실행시켜 보면 아래쪽과 같이 표시된다.
즉 현재 선택된 하나의 Item만 색깔이 적용되는 것이 아니라 모든 ListView Item 배경에 적용된 원하는 결과가 되지 않는 다.







setSelector 와 비슷한 Bug로는 이미 인터넷에 비슷한 사례로 있다
http://code.google.com/p/android/issues/detail?id=1629

어쩌든 나는 이 부분을 해결하여 내가 원하는 Selector 배경을 찾아야 하기에 다른 방법을 찾아 보았다.
ListView는 각각의 Item (View 또는 View Group)들이 모인 ViewGroup 이기 때문에 해당 Item이 Click 되었거나 Select 되었을 경우 Background를 특정 Drawable로 바꾸면 (특정 Color는 아직 테스트 하지 않았다) 될 것 같았고 실제로 이렇게 사용한 개발자가 있더라.
어쩌든 Item에 대한 XML은 아래와 같다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
 android:background="@drawable/list_view_selector" ⓐ >

        <ImageView
            android:id="@+id/biz_image"
           중략
           />
        
         <ImageView
            android:id="@+id/bnft_image"
           중략 
          android:scaleType="fitCenter"
        />
        
               
         <TextView
          android:id="@+id/mcth_name"
          중략  
             android:textColor="@color/Pantone_7533C"
             android:paddingLeft="10px"
             android:textSize="15sp"             
         />     
 
    
</LinearLayout>

 

각 Item들은 Image View 2개와 TextView 1개로 구성진 ViewGroup으로 되어 있고 ViewGroup을 정의한 LinearLayout에 background를 특정 drawable로 지정하였다 ⓐ

그런다음 setSelector를 투명하고 흰색으로 하여야 되는 데
아래와 같이하면 된다. 

this.setSelector(R.color.Pantone_Transparent);
this.setDrawSelectorOnTop(false); ⓐ

또는 (ⓐ 는 false이면 Selector가 Text 뒤로 간다. 당연히 false)

Paint selectPaint = new Paint(); 
selectPaint.setColor(Color.TRANSPARENT); 
getListView().setSelector(new PaintDrawable(selectPaint));

하면된다.
여기서 R.color.Pantone_Transparent 는 
/values/***.xml 파일에

<resoures>
<color name="Pantone_Transparent">#00000000</color><!--투명 -->
</resources>

라고 이미 정의 되어있는 값이다.

 위의 내용대로 하면 아래와 같이 구현할 수 있다.

 

 

 

[출처] [팁] ListView에서 Selector 배경을 특정색으로 변경할려면? |작성자 커트

    • 커트 2009/10/25 17:46답글android:background 를 특정 drawable 지정하지 않고 ColorStateList로 하는 방법이 있는 데 할수있는 View는 TextView 밖에 지원못한다. 따라서 위의 예와 같은 ViewGroup은 ColorStateList 로는 할 수 가 없었다.
    • 중고엑박 2010/06/28 19:59답글new PaintDrawable(selectPaint)구문에서 PaintDrawable(Paint) 생성자는 없다고 그러는데요.
    • 커트 2010/06/28 23:09답글네 맞네요. PaintDrawable 의 생성자는 () 이거나 (int color) 입니다. 원 Source를 보니 ListView의 setSelector 에는 Color 값을 주었네요. 즉 this.setSelector(R.color.Pantone_Transparent); 이고 xml에는 <color name="Pantone_Transparent">#00000000</color><!--투명 --> 라고 하였어요. 수정합니다.
    • minismine 2010/12/01 13:56답글담아갑니다~
    • 커트 2010/12/01 22:19답글감사합니다.

 

=================================

=================================

=================================

 

 

반응형