2017-10-26 16 views
0

내부에 ArrayAdapter이라는 다소 간단한 대화 상자가 있습니다. 나는이 대화 상자를 표시 할 때AlertDialog 안의 Android 스위치 위젯, 썸 이미지 표시 안함 (켜기/끄기)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="10dp"> 

    <TextView 
     android:id="@+id/txt_description" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentStart="true" 
     android:layout_centerVertical="true" 
     android:layout_toStartOf="@+id/calendar_selection_switch" 
     android:ellipsize="end" 
     android:text="test test" 
     android:textColor="@color/black" 
     android:textSize="20sp" /> 

    <Switch 
     android:id="@id/calendar_selection_switch" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_centerVertical="true" 
     android:layout_gravity="end|center_vertical" 
     android:layout_marginStart="10dp" 
     android:minHeight="40dp" 
     android:minWidth="80dp" /> 
</RelativeLayout> 

, 이것은 내가 무엇을 얻을 : 어댑터는 다음과 같은 레이아웃을 팽창

AlertDialog without the thumb image

공지 사항 작은 글자와 "OFF" "의"단어. 여기에 사용자 정의 그래픽이나 클래스는 없으며 바로 사용할 수 있습니다.

내가 이것을 Activity에서 할 때 나는 그것을 얻지 못합니다. 대신 내가 원하는 정확히 무엇이다, 정상적인 엄지 손가락의 이미지를 얻을 :

enter image description here

를 내가 어떤 차이가되지 않습니다 스위치의 크기를 증가하더라도. 목록의 행을 더 크게 만듭니다. CalendarListAdapter 간단한 ArrayAdapter입니다

AlertDialog.Builder builderSingle = new AlertDialog.Builder(this); 
builderSingle.setTitle(R.string.cal_title); 

builderSingle.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
}); 

final CalendarListAdapter cla = new CalendarListAdapter(this, calendarList, null); 
builderSingle.setAdapter(cla, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     cla.toggleSelect(which); 
    } 
}); 
builderSingle.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (saveCalendars(cla)) { 
      dialog.dismiss(); 
     } 
    } 
}); 
AlertDialog dialog = builderSingle.create(); 
dialog.show(); 

:

public class CalendarListAdapter extends ArrayAdapter<Calendar> { 

이 클래스의 Activity 버전과 AlertDialog 버전 사이에 차이가 있지만 없습니다 여기

대화 상자를 구축하고 표시하는 코드입니다 .

나는 당황합니다. 내가 여기서하는 일은별로 복잡하지 않습니다. 도와주세요.

답변

0

이 시도 :

<Switch 
     android:id="@+id/calendar_selection_switch" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_centerVertical="true" 
     android:layout_gravity="end|center_vertical" 
     android:layout_marginStart="10dp" 
     android:minHeight="40dp" 
     android:minWidth="80dp" 
     android:textOn="" 
     android:textOff="" 
     android:switchMinWidth="48.0sp" 
     android:thumb="@drawable/switch_selector" 
     android:track="@drawable/switch_track" 
     android:checked="false"/> 

switch_selector.xml :

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

    <item android:state_checked="true"> 
     <shape 
      android:shape="rectangle" 
      android:visible="true" 
      android:useLevel="false"> 
      <gradient 
       android:startColor="@color/white" 
       android:endColor="@color/white" 
       android:angle="270"/> 
      <corners 
       android:radius="14.0sp"/> 
      <size 
       android:width="28.0sp" 
       android:height="28.0sp" /> 
      <stroke 
       android:width="4.0sp" 
       android:color="#11000000"/> 
     </shape> 
    </item> 
    <item android:state_checked="false"> 
     <shape 
      android:shape="rectangle" 
      android:visible="true" 
      android:dither="true" 
      android:useLevel="false"> 
      <gradient 
       android:startColor="@color/white" 
       android:endColor="@color/white" 
       android:angle="270"/> 
      <corners 
       android:radius="16.0sp"/> 
      <size 
       android:width="28.0sp" 
       android:height="28.0sp" /> 
      <stroke 
       android:width="2.0sp" 
       android:color="#11000000"/> 
     </shape> 
    </item> 
</selector> 

switch_track.xml :

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    android:visible="true" 
    android:useLevel="false"> 
    <gradient 
     android:startColor="@color/white" 
     android:endColor="@color/white" 
     android:angle="270"/> 
    <stroke 
     android:width="2.0sp" 
     android:color="#11000000"/> 
    <corners 
     android:radius="14.0sp"/> 
    <size 
     android:width="42.0sp" 
     android:height="28.0sp" /> 
</shape> 

그런 다음 코드에서 당신이 할 수 있습니다

 aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        aSwitch.setTrackResource(R.drawable.switch_track_off); 
       } else { 
        aSwitch.setTrackResource(R.drawable.switch_track); 
       } 
      } 
     }); 
,

switch_track_off.xml : 당신이 원하는대로

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    android:visible="true" 
    android:useLevel="false"> 
    <gradient 
     android:startColor="#00A4FD" 
     android:endColor="#00A4FD" 
     android:angle="270"/> 
    <stroke 
     android:width="2.0sp" 
     android:color="#00A4FC"/> 
    <corners 
     android:radius="14.0sp"/> 
    <size 
     android:width="42.0sp" 
     android:height="28.0sp" /> 
</shape> 

당신은 색상 및 기타 스타일을 변경할 수 있습니다.

내가 아는 한, Switch의 모양과 느낌을 앱의 어느 곳에서나 동일한 Android 버전에서 동일하게 만드는 유일한 방법입니다.

더 좋은 제안이 있으면 의견을 남겨주세요.

+0

글쎄, 나는 이것이 내가 묻고있는 질문에 대한 대답이라고 생각하지 않는다. 그렇다면 AlertDialog 내부에있을 때와 Activity 내부에있을 때 스위치의 모양이 다른 이유는 무엇입니까? – Emmanuel

+0

다른 방법이 없다면이 방법을 사용할 수 있습니다. – Emmanuel

+0

@Emmanuel은'AlertDialog'의'support library' 버전을 사용하고 있습니까?나는 그것이 도서관에있는'드로어 블 (drawable) '부패로 인한 것이라고 생각한다. –