2016-10-11 4 views
1

나는이 설정을 사용하여 프로젝트와 안드로이드 스튜디오 2.2.1을 사용하고 있습니다 : I 버튼 배경을 변경하려면 GUI를 사용하는 경우버튼에 android : background를 설정하면 L/R 패딩이 손실되는 이유는 무엇입니까?

compileSdkVersion 24 
buildToolsVersion "24.0.2" 
minSdkVersion 16 
targetSdkVersion 24 

, 그것은 레이아웃이 추가 : 다음

android:background="@color/colorPrimary" 

, 4.4 가상 장치 (AMD 시스템에 있고 빠른 에뮬레이터를 원하기 때문에 Microsoft의 Android 에뮬레이터) 또는 Android 6.0.1이 설치된 Samsung Galaxy S6에서 앱을 실행하면 버튼의 색상이 정확하지만 잃을 수 있습니다 왼쪽 및 오른쪽 패딩 및 텍스트는 버튼의 왼쪽 및 오른쪽 가장자리로 오른쪽으로 실행됩니다.

backgroundTint 만 설정하면 단추에 올바른 색상이 있지만 가상 장치에는 올바른 채우기가 적용됩니다. 그러나 S6에서는 올바른 색상과 패딩을 사용합니다.

이것은 어딘가에있는 버그처럼 보이지만 어디서 볼 수 있습니까? 코드 생성에 있습니까? 아니면 Android 4.4의 버그입니까?

는 나는 이러한 솔루션의 일부로서 복잡한인지, 안드로이드 스튜디오는 두 플랫폼 수준에 대한 올바른 작동하게하는 데 필요한 어떤 일을해야한다고 생각 :

Standard Android Button with a different color

또는 뭔가 더 간결.

내 styles.xml 파일을 보여줍니다

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 

</resources> 

내 AndroidManifest를 테마 설정은 다음과 같습니다

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 

답변

1

이 어딘가에 벌레처럼 보이지만 어디?

바로 여기 : 코드 생성에

android:background="@color/colorPrimary" 

경우, 또는이 안드로이드 4.4의 버그?

아니요, 대체 배경입니다. 본질적인 패딩이없고, StateListDrawable에 싸여 있지 않은 색상입니다.

Button 위젯의 재고 배경에는 백그라운드 자체의 일부로 채워지는 여백이 있습니다 (예 : 배경에 사용되는 9 패치 PNG의 일부 투명 픽셀을 통해). 실제 배경 자체는 StateListDrawable이며 Button의 상태 (예 : 정상, 눌림, 집중, 사용 중지됨)에 따라 적용 할 수있는 여러 드로어 블 리소스 중 하나를 선택합니다.

Button 배경을 바꾸려면 먼저 StateListDrawable을 사용해야합니다. 그렇지 않으면 Button이 클릭 이벤트 또는 기타 상태 변경 사항 (예 : 사용 중지됨)에 시각적으로 반응하지 않는 것으로 보입니다. 그런 다음 상태의 배경에 일부 패딩을 포함 시키거나 위젯 자체에 패딩을 넣을 수 있습니다.

나는 안드로이드 스튜디오는

안드로이드 스튜디오 당신이 무엇을하고 있는지 알고 있다고 가정 두 플랫폼 수준에서 올바른 일을하기 위해 필요한 어떤 일을해야한다고 생각합니다. Button 배경에 이런 종류의 패딩이 있다는 하드 앤 패스트 요구 사항은 없으며 Button은 사용자에게 이해하기 쉬운 것이기 때문에 까다로운 요구 사항은 없습니다 ("이봐, 왜이 단추가 내가 탭할 때 시각적으로 반응합니까? "). 개발자 do을 수행하는 시나리오에서 세그먼트 화 된 목록 제어 유형의 복합 위젯 구현시와 같이위젯에는 패딩이 필요하지 않습니다.

개인적으로 나는 Button 배경에 일부 내장 패딩을 가져야한다는 결정이 유감 스럽다고 생각합니다. 그러나 그것이 Android 1.0에서 다시 구현 된 방식이며, Google은 새로운 테마를 사용하는 경우에도 이전 버전과의 호환성을 위해 접근 방식을 유지하기로 선택했습니다.

나는 단지 backgroundTint을 설정하면, 다음 버튼을 가상 장치의 올바른 패딩,하지만 정확한 색상

내가 appcompat-v7backgroundTint와 함께 연주 해본 적이 없어 있습니다. 거기에 버그를보고있을 수도 있습니다. 특정 사례에 대한보다 구체적인 도움을 얻으려면 전체 예제와 함께 별도의 질문과 스크린 샷을 게시하는 것이 좋습니다.

+0

BTW, [배경 요청] (http://code.google.com/p/android/issues/detail?id=224980)을 제출하여 Lint가 배경색을 ' 버튼 '. 틀림없이, 이것은 당신의 "패딩이 어디 갔는지"를 직접적으로 언급하지 않을 것입니다. 걱정할 필요는 없지만 'Button'배경은 보통 단순한 색상이 아니라는 점을 지적하는 데 도움이됩니다. – CommonsWare

+0

나는 발견 android.support.v7.widget.AppCompatButton : http://stackoverflow.com/questions/32335232/button-backgroundtint-not-working-with-appcompat-v23 과로 변경 with : app : backgroundTint = "@ color/colorPrimary" 모든 것이 올바르게 작동합니다. – Mark

+0

방금도 만났습니다. https://code.google.com/p/android/issues/detail?id=203872 이렇게 항상 작동하지 않을 수도 있습니다. – Mark