2016-04-19 14 views
8

Tôi đã một AppCompatButton định nghĩa trong một layout XML, và tôi đã thiết lập một chủ đề cho nó như thế này:Tạo kiểu một AppCompatButton trong v21 không có bóng và góc radius của zero

android:theme="@style/CustomAccentOverlay"

Và tôi đã thiết lập:

android:stateListAnimator="@null"

để xóa bóng. Tôi có hai vấn đề với điều này.

Chiều cao của nút được khấu trừ chiều cao của bóng, ngay cả khi bóng không được hiển thị. Tôi có nên loại bỏ bóng theo cách khác hay làm cách nào để khắc phục sự cố này?

Nút có góc tròn và tôi muốn các góc được sắc nét. Tôi không thể thiết lập một nền trên nút, bởi vì tôi muốn giữ hiệu ứng gợn tiêu chuẩn và biến mất nếu tôi thiết lập một nền (ít nhất tôi không biết làm thế nào để giữ nó nếu tôi thiết lập một nền). Tôi đã thử đặt

<item name="android:bottomLeftRadius">0dp</item>

và tất cả các góc khác vào chủ đề CustomAccentOverlay và kiểu tương ứng của nó, nhưng nó không hoạt động. Làm thế nào tôi có thể thiết lập bán kính góc bằng không trên nút của tôi?

Cảm ơn bạn
Søren

+0

Bạn có thể gửi một hình ảnh của nút mà bạn muốn hiển thị? –

Trả lời

5

Sử dụng đoạn mã sau cho Button.

<android.support.v7.widget.AppCompatButton 
android:layout_width="200dp" 
android:layout_height="200dp" 
android:text="Button" 
android:stateListAnimator="@null" 
android:elevation="0dp" 
android:background="@android:color/darker_gray" 
android:foreground="?attr/selectableItemBackground" 
/> 

Tôi sẽ giải thích các thuộc tính.

  1. android: elevation = "0dp" và android: stateListAnimator = "@ null". Không có bóng cho nút.

  2. android: background. Đặt màu mong muốn làm nền. Nó loại bỏ các góc tròn.

  3. android: foreground = "? Attr/selectableItemBackground". Nó cho hiệu ứng gợn khi nhấn nút.

Cập nhật 1:

Nó có vẻ như android: attribute foreground cho Xem làm việc từ API 23. Đối với các API dưới đây, tạo ra một drawable với gợn trong thư mục drawable-v21 và đặt nó làm nền để nút,

<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:ignore="NewApi" 
    android:color="@color/ripple_color"> 

    <item android:drawable="@color/normal_state_button_background_color"/> 

</ripple> 

Đối với phiên bản Lollipop trước, hãy tạo bản vẽ có thể chọn trong thư mục có thể vẽ cùng tên.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/pressed_color" 
      android:state_pressed="true" /> 
    <item android:drawable="@drawable/focused_color" 
      android:state_focused="true" /> 
    <item android:drawable="@drawable/normal_color" /> 
</selector> 
+0

gợn không hiển thị –

+0

bạn có thể dùng thử trong thiết bị Marshmallow không. – Bob

+0

Tôi đã thử trên kẹo! –

2

Câu hỏi đầu tiên: Cách xóa bóng của nút?

Dưới đây là câu trả lời: Chỉ cần thêm thuộc tính này để nút của bạn

android:stateListAnimator="@null" 

Câu hỏi thứ hai: Làm thế nào để làm cho góc nút sắc nét mà không làm mất hiệu lực gợn tiêu chuẩn. Đây là câu trả lời: Nhưng trước tiên bạn phải tạo hai tệp drawble có cùng tên nhưng một cho dưới api 21 và một cho api> 21 vì gợn chỉ có sẵn api> 21. Bây giờ tôi đang chỉ cách tạo that.Read văn bản sau một cách cẩn thận

nhấp chuột phải vào thư mục và chọn drawble mới và "tập tin tài nguyên Drawble" và nhấn tiếp theo sau đó đặt tên cho drawble bất cứ điều gì bạn thích và nhấn nhấp chuột ok.Then một lần nữa phải vào drawble và chọn mới và "Drawble resource file" và nhấn tiếp theo và đặt tên cho drawble chính xác những gì bạn đặt tên cho thư mục drawble trước đây nhưng lần này bạn có thể thấy một phần được gọi là "vòng loại có sẵn". phía dưới bạn có thể thấy "Phiên bản", nhấp vào nó và sau đó bạn có thể thấy biểu tượng mũi tên ở bên phải, nhấp vào biểu tượng đó trong "Cấp độ nền tảng api" thêm 21 và sau đó nhấn ok. Và bây giờ nếu bạn mở rộng thư mục drawble, bạn có thể thấy hai tệp của tệp drawble đã tạo của bạn. dưới 21 và một lần cho trên 21.Open tập tin drawble mà bạn đã tạo và chắc chắn rằng bạn mở mà có "(v21)" ở last.Now xóa tất cả mọi thứ từ đó và thêm đoạn mã sau

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

<item> 
    <shape> 
     <corners android:radius="0dp"/> 
     <solid android:color="#D6D7D7"/> 
    </shape> 
</item> 

</ripple> 

và thêm thuộc tính này cho nút của bạn

android:background="@drawable/youdrawblefilethatyouhavecreated" 

Và bây giờ nếu bạn chạy ứng dụng, bạn có thể thấy không có bóng và nút của bạn có góc sắc nét và nếu bạn nhấp vào rippl e xuất hiện.

Cuối cùng, nút của bạn trông giống như

<android.support.v7.widget.AppCompatButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button 1" 
    android:background="@drawable/yourcreatddrawblefile" 
    android:stateListAnimator="@null"/> 

Hy vọng điều này giúp đỡ này!

3

Có vẻ như bạn muốn sử dụng TextView có thể nhấp thay vì Nút. TextView theo mặc định sẽ không có bóng và có các góc sắc nét và bạn có thể đính kèm trình nghe nhấp chuột vào nó. Hãy nhớ rằng, Button chỉ là một TextView ưa thích với rất nhiều tiện ích trực quan cho nó, và nó có vẻ như bạn muốn loại bỏ rất nhiều nó.

Nếu bạn muốn giữ lại các gợn trên TextView và xác định nền của riêng bạn, thiết lập android:foreground="?attr/selectableItemBackground"

EDIT: Mặc dù câu trả lời khác được đánh dấu chấp nhận, tôi vẫn cho rằng OP nên sử dụng một TextView với một click listener và áp dụng hiệu ứng gợn cho nó hơn là sử dụng Button. TextViews có thể nhấp theo cách này là chính xác cách ứng dụng Google I/O triển khai tất cả các nút phẳng của chúng đáp ứng được đặc điểm Material Design.

+0

Thuộc tính foreground sẽ không hoạt động bên dưới API 23. – Bob

+0

Bạn nói đúng, tạo ra các gợn tùy chỉnh có thể drawable với dự phòng trước kẹo que (cách bạn đã nói ở trên) là những gì tôi làm. Tôi vẫn sẽ đề nghị một TextView trên một nút vào thời điểm này, nhưng làm thế nào bạn đang xử lý gợn là chính xác. – ekchang

0

Sử dụng mã này

<android.support.v7.widget.AppCompatButton 
    android:layout_width="match_parent" 
    android:layout_height="50dp" 
    android:background="@color/colorAccent" 
    android:text="@string/button" /> 
Các vấn đề liên quan