13

Tôi đang tạo chế độ xem tìm kiếm của riêng mình cho Android 2.3.Đã xảy ra lỗi trong bán kính Góc Android

Tôi có.

  • LinearLayout (Ngang)
  • AutoCompleteTextView
  • ImageButton

tôi đã thêm nút và AutoCompleteTextView để LinearLayout.

Tôi muốn đặt bán kính góc trong điều khiển của chính tôi như hình ảnh được hiển thị bên dưới.

enter image description here

tôi đặt drawable này để ImageButton

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_pressed="true" > 
    <shape> 
     <solid 
      android:color="#27AFE0" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="#000000" /> 
     <corners 
      android:topRightRadius="10dp" android:bottomRightRadius="10dp" 
android:topLeftRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 
<item> 
    <shape> 
     <solid android:color="#D3DBDE"/> 
     <stroke 
      android:width="0.5dp" 
      android:color="#000000" /> 
     <corners 
      android:topRightRadius="10dp" android:bottomRightRadius="10dp" 
android:topLeftRadius="0.1dp" 
      android:bottomLeftRadius="0.1dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

drawable để AutoCompleteText

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item> 
    <shape android:shape="rectangle"> 
     <solid android:color="#D3DBDE"/> 
     <stroke android:width="0.5dp" android:color="#000000"/> 
     <corners android:topLeftRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topRightRadius="0.1dp" 
      android:bottomRightRadius="0.1dp"/> 
    </shape> 
</item> 

Nhưng khi tôi chạy này trong android 2.3 này là sản phẩm (Emulator và Real Device)

enter image description here

Nếu tôi cũng chạy Android 4.0. Nó hoạt động tốt.

enter image description here

Câu hỏi là có gì sai trong mã của tôi? Hoặc có lỗi trong Android 2.3?

+0

Các góc có thể vẽ ImageButton có topRightRadius và bottomRightRadius được xác định hai lần. Đó có phải là lỗi đánh máy không? Và việc sử dụng một phần của dp là gì? – Rajesh

+0

@Rajesh Vâng, tôi xin lỗi. Bạn sẽ thấy lý do tại sao tôi đã sử dụng 0.1dp trên liên kết này http://stackoverflow.com/questions/3056232/how-to-make-a-shape-with-left-top-round-rounded-corner-and-left-bottom -rounded-c –

Trả lời

26

Ok vì vậy, đây là giao dịch mà tôi đã đánh dấu là tốt. Có 2 thứ với cái này.

Trong bộ chọn ImageButton, bạn dường như sao chép các thuộc tính cho các góc phải hai lần trong mỗi thẻ góc.

Lỗi thứ hai là lỗi trong Android cho đến phiên bản 3.0. Khi chỉ định các góc riêng biệt, các góc dưới cùng bên trái và bên phải được lật.

http://code.google.com/p/android/issues/detail?id=9161

tôi đã chiết xuất các giá trị ra dimens và đặt chúng trong hai tập tin khác nhau,

res/values ​​/ corners.xml - với những thứ đảo ngược

res/values-v12 /corners.xml - với các giá trị sane trong chúng.

+0

Vì vậy, từ 3.1 vấn đề là cố định? –

+0

Từ API 12 và trên API đã được sửa. Rất tiếc, đã viết phiên bản sai. Nhưng có –

+0

điều này có khắc phục được không? –

1

Có lỗi trong các phiên bản trước đó (sớm hơn ICS tức là 4.0) của android, ở đó chúng đã được triển khai không chính xác thuộc tính 'góc' của lớp 'Hình dạng'. Vì vậy, để có được đúng loại góc trên tất cả các phiên bản, bạn sẽ phải viết một điều kiện để kiểm tra phiên bản đích và phù hợp bạn có thể thiết lập nền chính xác.Một cái gì đó phương pháp như thế này sẽ giải quyết vấn đề của bạn -

/** * xử lý các lỗi trong phiên bản Pre ICS với yếu tố góc của lớp Shape * */

private void getPreICSButtonBackground() { 
    if(Build.VERSION.SDK_INT >= 4.0){ 
     leftButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_left)); 
     rightButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.btn_rounded_right)); 
    } 
} 

ở đâu trong 'R.drawable. góc btn_rounded_left' được thực hiện như

<corners android:topLeftRadius="5dp" android:topRightRadius="0dp" 
    android:bottomLeftRadius="5dp" android:bottomRightRadius="0dp" /> 

và nếu nó đang chạy trên các phiên bản trước đó, sau đó đặt nền có góc như

<corners android:topLeftRadius="5dp" android:topRightRadius="0dp" 
    android:bottomLeftRadius="0dp" android:bottomRightRadius="5dp" /> 

Tương tự như vậy đối với nút bên phải. Hy vọng điều này giải quyết vấn đề của bạn