4

에 대해 서로 다른 스타일을 설정하는 가장 간단한 방법 : 첫 번째에 대한특정 라디오 버튼 - 내 레이아웃에 라디오 버튼의 특정 유형을 달성하고자하는 최초/마지막 버튼

enter image description here

= 다른 그래픽 항목, 중간 항목 및 마지막 항목은 둥근 모서리가 다릅니다. 세 가지 유형의 버튼 (사용자 정의 스타일, 상태 저장 드로어 블 사용)에 대해 서로 다른 스타일로이 작업을 수행 할 수 있습니다.

맞춤 토글 버튼을 사용하여 구현 중입니다. 내가 처음과 마지막 항목에 대해 서로 다른 드로어 블을 사용하는 그릴 수 셀렉터를 활용하고자하는, 그래서 내가 사용 :

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_checked="true" android:state_first="true" 
     android:drawable="@drawable/radio_left_act"/> 

    <item android:state_checked="true" android:state_last="true" 
     android:drawable="@drawable/radio_right_act"/> 

    <item android:state_checked="true" 
     android:drawable="@drawable/radio_middle_act"/> 

    <item android:state_checked="false" android:state_first="true" 
     android:drawable="@drawable/radio_left_inact"/> 

    <item android:state_checked="false" android:state_last="true" 
     android:drawable="@drawable/radio_right_inact"/> 

    <item android:state_checked="false" 
     android:drawable="@drawable/radio_middle_inact"/> 

</selector> 

을하지만 지금은 문제가 있다면, 그 state_first, state_last가 자동으로 설정되지 않은 상태 내 LinearLayout, 버튼을 클릭 할 때마다 수동으로 설정해야합니다. 어떤 방법으로, 어떤 레이아웃이 있습니까?이 상태는 자동으로 설정됩니까? 어떤 도움을 주셔서 감사합니다.

답변

3

특별한 것은 없으므로 여기에는 사용자 정의 토글 버튼이있는 "기본"솔루션이 있습니다. 여기에 3 개 처음에 대해 (styles.xml에 넣어) 다른 스타일, 중간 사람과 마지막 버튼입니다 : 그래서 단지 1 버튼이 동일한 시간에 체크

<!-- Toggle button styles --> 

<style name="CustomToggle"> 
    <item name="android:paddingTop">9dp</item> 
    <item name="android:paddingBottom">9dp</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_width">0dp</item> 
    <item name="android:layout_weight">1</item> 
</style>    

<style name="FirstToggle" parent="@style/CustomToggle"> 
    <item name="android:background">@drawable/radio_first</item> 
</style>    

<style name="MiddleToggle" parent="@style/CustomToggle"> 
    <item name="android:background">@drawable/radio_middle</item> 
</style>    

<style name="LastToggle" parent="@style/CustomToggle"> 
    <item name="android:background">@drawable/radio_last</item> 
</style> 

그리고 토글 버튼의 ​​이벤트를 처리 활동에 대한 짧은 코드, 그리고 확인 버튼을 사용할 수 없습니다 :

어쩌면
public class AktivityActivity extends Activity 
{ 
    ArrayList<ToggleButton> toggle_buttons; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.aktivity); 

     initToggleButtons(); 
    } 

    private void initToggleButtons() 
    { 
     toggle_buttons = new ArrayList<ToggleButton>(); 
     toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_1)); 
     toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_2)); 
     toggle_buttons.add((ToggleButton) findViewById(R.id.toggle_3)); 

     // Listen on all toggle buttons 
     for (ToggleButton toggle_button : toggle_buttons) 
      toggle_button.setOnCheckedChangeListener(check_listener); 

     // Check first toggle button 
     updateToggleButtons(toggle_buttons.get(0)); 
    } 

    // Only one toggle can be checked, and checked button must be disabled 
    private void updateToggleButtons(ToggleButton checked_button) 
    { 
     for (ToggleButton toggle_button : toggle_buttons) 
     { 
      toggle_button.setChecked(toggle_button == checked_button); 
      toggle_button.setEnabled(toggle_button != checked_button); 
     } 
    } 

    // Toggle buttons change listener 
    OnCheckedChangeListener check_listener = new OnCheckedChangeListener() 
    { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      if (isChecked) 
       updateToggleButtons((ToggleButton) buttonView); 
     } 
    }; 
} 

은 누군가를위한 유용 할 수 있습니다 ...

1

Wordpress Android 프로젝트를 확인해야합니다. 유사한 기능을 제공하는 "ToggleButton"을 사용합니다. .xml 모양은 here입니다. 전체 소스를 다운로드하려면 here으로 가십시오.

단추가 토글되어 있기 때문에 원하는 것과 다를 수 있지만 원하는 스타일의 라디오 버튼에 맞게 조정할 수 있습니다 (이미 내장되어 있지 않은 경우).

Wordpress Android 프로젝트 덕분에 많은 것을 배울 수있었습니다. 테마, 사용자 정의 단추, 사용자 정의 레이아웃, 토글 단추, xmlrpc 등 모든 것.

+0

은 t 주셔서 감사합니다 그는 팁. 지금 당장이 코드를 확인하고 있지만 내 경우와 비슷한 것을 보면 확실하지 않습니다. 나는 그들이 단 하나의 스타일의 토글 버튼만을 사용한다고 생각한다. 그러나 스타일에 대한 많은 훌륭한 작업이 있으며 좋은 "준비가 끝난 솔루션"이 없다면 직접해야 할 것입니다. –

1

enter image description here

는 SI 나는이 일을 찾을 mplest 방법은 다음과 같이

1) RadioButton 클래스를 확장 : 라디오에 대한 XML 코드 아래

import android.content.Context; 
import android.view.ViewGroup; 
import android.widget.RadioButton; 

public class RoundedButton extends RadioButton { 

    private static final int[] STATE_ONLY_ONE = new int[] { 
      android.R.attr.state_first, 
      android.R.attr.state_last, 
    }; 

    private static final int[] STATE_FIRST = new int[] { 
      android.R.attr.state_first 
    }; 

    private static final int[] STATE_LAST = new int[] { 
      android.R.attr.state_last 
    }; 

    public RoundedButton(Context context) { 
     super(context); 
    } 

    @Override 
    protected int[] onCreateDrawableState(int extraSpace) { 
     ViewGroup parent = (ViewGroup) getParent(); 
     if (parent == null) { 
      return super.onCreateDrawableState(extraSpace); 
     } 

     final int size = parent.getChildCount(); 
     final boolean isFirst = (parent.getChildAt(0) == this); 
     final boolean isLast = (parent.getChildAt(size-1) == this); 

     int[] states = super.onCreateDrawableState(extraSpace + 2); 
     if (isFirst && isLast) { 
      mergeDrawableStates(states, STATE_ONLY_ONE); 
     } else if (isFirst) { 
      mergeDrawableStates(states, STATE_FIRST); 
     } else if (isLast) { 
      mergeDrawableStates(states, STATE_LAST); 
     } 

     return states; 
    } 

} 

2) "고해상도/드로어 블/사진 rbtn_selector.xml"에서 하나 개의 XML 파일을 만듭니다 추가 단추 배경입니다.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- First Checked --> 
    <item android:state_first="true" android:state_checked="true"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_selected_start" 
       android:endColor="@color/radio_button_selected_end" 
       android:type="linear" /> 
      <!--<solid android:color="@android:color/holo_blue_dark" />--> 
      <corners android:topLeftRadius="10dp" android:topRightRadius="10dp"/> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_selected" /> 
     </shape> 
    </item> 

    <!-- First Unchecked --> 
    <item android:state_first="true" android:state_checked="false"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_unselected_start" 
       android:endColor="@color/radio_button_unselected_end" 
       android:type="linear" /> 
      <!--<solid android:color="@android:color/holo_purple"/>--> 
      <corners android:topLeftRadius="10dp" android:topRightRadius="@dimen/radio_button_radius"/> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_unselected" /> 
     </shape> 
    </item> 

    <!-- Last Checked --> 
    <item android:state_last="true" android:state_checked="true"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_selected_start" 
       android:endColor="@color/radio_button_selected_end" 
       android:type="linear" /> 
      <!--<solid android:color="@android:color/holo_green_dark" />--> 
      <corners android:bottomLeftRadius="@dimen/radio_button_radius" android:bottomRightRadius="@dimen/radio_button_radius"/> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_selected" /> 
     </shape> 
    </item> 

    <!-- Last Unchecked --> 
    <item android:state_last="true" android:state_checked="false"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_unselected_start" 
       android:endColor="@color/radio_button_unselected_end" 
       android:type="linear" /> 
      <!--<solid android:color="@android:color/holo_red_dark"/>--> 
      <corners android:bottomLeftRadius="@dimen/radio_button_radius" android:bottomRightRadius="@dimen/radio_button_radius"/> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_unselected" /> 
     </shape> 
    </item> 



    <!-- Default Checked --> 
    <item android:state_checked="true"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_selected_start" 
       android:endColor="@color/radio_button_selected_end" 
       android:type="linear" /> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_selected" /> 
      <!--<solid android:color="@android:color/holo_orange_dark" />--> 
     </shape> 
    </item> 

    <!-- Default Unchecked --> 
    <item android:state_checked="false"> 
     <shape> 
      <gradient 
       android:angle="90" 
       android:startColor="@color/radio_button_unselected_start" 
       android:endColor="@color/radio_button_unselected_end" 
       android:type="linear" /> 
      <stroke android:width="@dimen/radio_button_border" android:color="@color/radio_button_border_unselected" /> 
      <!--<solid android:color="@android:color/holo_green_light"/>--> 
     </shape> 
    </item> 
</selector> 

3)에서 하나 개의 XML 파일을 만듭니다 "고해상도// rbtn_textcolor_selector.xml 당김"라디오 버튼 텍스트 선택 색상에 대한 XML 코드 아래에 추가합니다. (텍스트 색상 선택기 XML 파일)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:color="@color/radio_text_selected"/> 
    <item android:color="@color/radio_text_unselected"/> 
</selector> 

4) 스타일을 버튼으로 설정하십시오 :

4.1) 프로그래밍 exixsting을 radioGroup 일부 RoundedButton을 추가

RoundedButton newRadioButton = new RoundedButton(this.getActivity()); 

if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    newRadioButton.setBackgroundDrawable(this.getActivity().getResources().getDrawable(R.drawable.rbtn_selector)); 
} else { 
    newRadioButton.setBackground(this.getActivity().getResources().getDrawable(R.drawable.rbtn_selector)); 
} 
newRadioButton.setTextColor(this.getActivity().getResources().getColorStateList(R.color.rbtn_textcolor_selector)); 

4.2) XML을 :

<RoundedButton 
    android:id="@+id/bt_id_1" 
    android:background="@drawable/rbtn_selector" 
    android:textColor="@drawable/rbtn_textcolor_selector" /> 

5) 자신의 색상과 치수를 선택 제가 예에서 사용 된 것과 같습니다

<color name="radio_text_selected">#FFF</color> 
<color name="radio_text_unselected">#222</color> 

<color name="radio_button_selected_start">#5393c5</color> 
<color name="radio_button_selected_end">#6facd5</color> 

<color name="radio_button_unselected_start">#f9f9f9</color> 
<color name="radio_button_unselected_end">#eee</color> 

<color name="radio_button_border_selected">#2373a5</color> 
<color name="radio_button_border_unselected">#aaa</color> 

과 :

<dimen name="radio_button_radius">10dp</dimen> 
<dimen name="radio_button_border">0.7dp</dimen>