2016-01-27 13 views
9

Tôi gặp phải sự cố với chế độ xem Button khi tôi đặt nền cho chế độ nền bằng cách sử dụng thuộc tính android:background trong xml. Trước khi tôi đặt nền, nút có kích thước mặc định của nó. Nhưng khi tôi áp dụng màu làm nền, nó trở nên to hơn, mặc dù tôi không đặt một số khác nhau là width hoặc height trên đó.Tại sao nút lớn hơn khi nền được đặt trong android

Đây là bố cục xml của tôi trước khi tôi đặt thuộc tính nền cho nút

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:background="@color/white" 
     android:layout_gravity="center_horizontal" 
     android:id="@+id/btn_row_option_done" 
     android:text="Done" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:background="@color/white" 
     android:layout_gravity="center_horizontal" 
     android:text="Edit" 
     android:id="@+id/btn_row_option_edit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:layout_gravity="center_horizontal" 
     android:text="Delete" 
     android:id="@+id/btn_row_option_delete" 
     android:background="@color/red" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <Button 
     android:layout_gravity="center_horizontal" 
     android:text="Cancel" 
     android:id="@+id/btn_row_option_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Vì vậy, các nút hủy là kích thước mặc định như trong ảnh chụp màn hình.

enter image description here

Nhưng khi tôi thiết lập một màu vào nút hủy như thế này

<Button 
     android:background="@color/white" 
     android:layout_gravity="center_horizontal" 
     android:text="Cancel" 
     android:id="@+id/btn_row_option_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

Sau đó các nút được lớn hơn kích thước mặc định, mặc dù tôi đã không làm cho chiều rộng hoặc chiều cao lớn hơn .

Đây là ảnh chụp màn hình

Như bạn có thể nhìn thấy phía trên nút hủy trở nên lớn hơn. Thực ra tôi đang thiết lập màu nền. Làm thế nào tôi có thể sửa chữa nó để có được kích thước mặc định ngay cả sau khi tôi thiết lập màu nền?

enter image description here

Trả lời

7

Bạn cần phải phân biệt giữa kích thước của Button, chiều rộng của nó và chiều cao, toàn bộ khu vực bạn có thể click vào, và ảnh sử dụng để hiển thị nút.

Nút mặc định trên Android có phần đệm được áp dụng cho nó có thể vẽ được - có vẻ như nó nhỏ hơn. Nó thực sự có cùng kích thước.

Nếu bạn tự vẽ và áp dụng không có đệm, nền sẽ vẽ trong phạm vi toàn bộ giới hạn của chế độ xem, làm cho nó có vẻ lớn hơn.

Bạn luôn có thể chỉ sử dụng nút mặc định nhưng áp dụng màu của riêng bạn bằng cách sử dụng AppCompat. Điều này hỗ trợ tô màu nền của nút mặc định.

<android.support.v7.widget.AppCompatButton 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:backgroundTint="#ffaa00"/> <!-- <--- Your color here --> 

... sẽ cho phép bạn sử dụng cùng một lần xuất hiện.

+2

@WaiYanHein có, vì những lý do được giải thích ở trên. Bạn đang thay thế ** background ** bằng 'ColorDrawable' sẽ lấp đầy chế độ xem * toàn bộ *. Bạn chỉ cần sử dụng 'backgroundTint' để thay đổi màu sắc, hoặc tạo một drawable tùy chỉnh và áp dụng một số padding –

+0

Xin lỗi. Nó đã làm việc. Cảm ơn. Nó không sự kiện phá vỡ mã java hiện có. Đúng ? –

+0

@WaiYanHein nếu bạn sử dụng AppCompat nó sẽ hoạt động tốt. Đó là những gì compat ứng dụng là dành cho –

0

Đó là vì bạn đang sử dụng nội dung bọc cho chiều rộng và chiều cao.

Bạn có một số tùy chọn. Cách nhanh chóng và đơn giản? Thiết lập giá trị của các nút chỉ định một kích thước trong DP như:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:background="@color/white" 
     android:layout_gravity="center_horizontal" 
     android:id="@+id/btn_row_option_done" 
     android:text="Done" 
     android:layout_width="200dp" 
     android:layout_height="200dp" /> 

    <Button 
     android:background="@color/white" 
     android:layout_gravity="center_horizontal" 
     android:text="Edit" 
     android:id="@+id/btn_row_option_edit" 
     android:layout_width="200dp" 
     android:layout_height="200dp" /> 

    <Button 
     android:layout_gravity="center_horizontal" 
     android:text="Delete" 
     android:id="@+id/btn_row_option_delete" 
     android:background="@color/red" 
     android:layout_width="200dp" 
     android:layout_height="200dp" /> 

    <Button 
     android:layout_gravity="center_horizontal" 
     android:text="Cancel" 
     android:id="@+id/btn_row_option_cancel" 
     android:layout_width="100dp" 
     android:layout_height="100dp" /> 
</LinearLayout> 
+0

Tôi nghĩ việc xác định chiều rộng và chiều cao là tùy chọn duy nhất. Tôi đặt đệm, không hoạt động. Tôi đã sử dụng AppCompatButton, không hoạt động. –

+0

Bạn có thể sử dụng bố cục tương đối thay vì bố cục tuyến tính cũng như –

+0

Nhưng giải pháp này không hữu ích khi chúng tôi không biết giá trị văn bản bên trong nút. Nói chung, trường hợp bạn dịch ứng dụng. Vì vậy, giải pháp này không phải là lý tưởng. –

4

Sử dụng thuộc tính android:backgroundTint trong thẻ XML <Button>.

Giống như:

android:backgroundTint="#6567dc"

Không cần phải sử dụng <android.support.v7.widget.AppCompatButton> Button.

+0

Tôi có cùng một vấn đề nhưng tôi phải đặt nền cho tệp xml có các mục mặc định cũng như android: itemPressed để tôi không thể sử dụng backgroundTint. Vì vậy, bất kỳ đề xuất nhiều hơn? –

+0

Tôi đã cố gắng giải quyết vấn đề ur và tôi đã nhận được một giải pháp, Nó có thể trông mệt mỏi nhưng hoạt động. Trong XML của bạn, bên trong thẻ thêm màu của ai sẽ là màu nền của màn hình ứng dụng ur. Như thế này:

Các vấn đề liên quan