Nút nền trong suốt


177

Tôi có một nút. Khi tôi nhấn nút, tôi phải làm cho văn bản đậm như bình thường. Vì vậy, tôi đã viết phong cách cho đậm và bình thường.

<style name="textbold" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">bold</item>
</style>
<style name="textregular" parent="@android:style/TextAppearance">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textStyle">normal</item>
</style>

Bây giờ tôi có tệp button_states.xml là:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="true"
    style="@style/textbold" />
<item android:state_focused="false" android:state_pressed="true"
    style="@style/textregular" />

<item style="@style/textregular" />
</selector> 

Trong cách bố trí của tôi cho nút này, tôi cũng phải làm cho nền trong suốt ... Tôi sẽ làm thế nào? Mã bố cục của tôi là:

<Button android:id="@+id/Btn" android:background="@drawable/button_states" />

Làm thế nào tôi sẽ bao gồm nền trong suốt trong phong cách của tôi?


3
Vì vậy, nhiều câu trả lời hay trong số này có thể được chấp nhận ngay bây giờ ...
QED

kiểm tra câu trả lời này tại đây để tạo nút trong suốt có viền
Basheer AL-MOMani

'tại sao bạn không sử dụng TextView và gọi hành động trên onClick của nó?
Dula wnRp

Câu trả lời:


360

Để làm cho một nền trong suốt, chỉ cần làm android:background="@android:color/transparent".

Tuy nhiên, vấn đề của bạn có vẻ sâu hơn một chút, vì bạn đang sử dụng bộ chọn theo cách thực sự kỳ lạ. Cách bạn đang sử dụng có vẻ sai, mặc dù nếu nó thực sự hoạt động, bạn nên đặt hình nền theo phong cách như một <item/>.

Hãy xem xét kỹ hơn cách các phong cách được sử dụng trong nguồn Android. Mặc dù họ không thay đổi kiểu dáng văn bản khi nhấp vào nút, nhưng có rất nhiều ý tưởng hay về cách thực hiện mục tiêu của bạn ở đó.


1
Hãy xem câu trả lời làm rõ của tôi. Tôi đọc sai vấn đề của bạn để bắt đầu. Nền được thiết lập theo phong cách.
Steve Pomeroy

Xin lỗi, tôi không rõ về giải pháp. Chỉ cần thiết lập @android: màu sắc / trong suốt không hỗ trợ các kiểu chạm mà các nút thông thường có (và tương đương với việc đặt nền thành @null).
gatoatigrado

@gatoatigrado: bạn có nghĩa là bạn muốn một khu vực trong suốt được viền màu cam hoặc bóng mờ trong một số điều gì đó? Nếu vậy, bạn sẽ cần tạo hình ảnh 9 miếng tùy chỉnh cho điều đó.
Steve Pomeroy

@StevePomeroy, vâng, hiệu ứng nút mặc định trên Android 4.1 dành cho [nhấn nút] nền có màu xanh nhạt, với đường viền màu xanh lam nhạt hơn.
gatoatigrado

@gatoatigrado: ok. Nếu bạn muốn điều đó, thì bạn không thể sử dụng một nút trong suốt. Tôi không chắc những gì bạn đang cố gắng thực hiện ở đó.
Steve Pomeroy

121

Hãy thử cách mới để đặt nền trong suốt

    android:background="?android:attr/selectableItemBackground"

9
Đây là những gì tôi muốn giới thiệu sử dụng. Bằng cách này, bạn có thể giữ các hình động thiết kế vật liệu đẹp mắt cho các nút của mình =)
Ryan Newsom

đây là câu trả lời tốt hơn
Marcos Dávalos

35

sử dụng #0000(chỉ có bốn số không nếu không nó sẽ được coi là black) đây là mã màu cho trong suốt. Bạn có thể sử dụng nó trực tiếp nhưng tôi khuyên bạn nên xác định màu trong color.xml để bạn có thể tận hưởng lại tính hữu dụng của mã.


9
May mắn thay, điều này đã được định nghĩa cho chúng tôi là@android:color/transparent
Richard Le Mesurier

34

Thêm cái này vào Xml của bạn -android:background="@android:color/transparent"

        <Button
            android:id="@+id/button1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Button"
            android:background="@android:color/transparent"
            android:textStyle="bold"/>

32

Bạn cũng có thể sử dụng: trong xml của bạn:

android:background="@null"

hoặc trong mã:

buttonVariable.setBackgroundColor(Color.TRANSPARENT);

Upvote cho đưa ra lựa chọn thay thế, thích nhìn thấy tất cả các tùy chọn!
Burkely91

18

Tôi đã đạt được điều này với XML bằng

android:background="@android:color/transparent"

9

Tôi đã sử dụng

btn.setBackgroundColor(Color.TRANSPARENT);

android:background="@android:color/transparent"

btn.setBackgroundColor (Color.TRANSPARENT); hoạt động tốt với tôi
jay_mziray

8

Bộ chọn chỉ hoạt động cho drawable, không phải kiểu. Tài liệu tham khảo


Đầu tiên , để làm cho nền nút trong suốt, hãy sử dụng thuộc tính sau vì điều này sẽ không ảnh hưởng đến hoạt ảnh thiết kế vật liệu:

style="?attr/buttonBarButtonStyle"

Có nhiều cách để tạo kiểu cho nút của bạn. Kiểm tra hướng dẫn này .

Thứ hai , để làm cho văn bản được in đậm, hãy sử dụng mã java này:

btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            // When the user clicks the Button
            case MotionEvent.ACTION_DOWN:
                btn.setTypeface(Typeface.DEFAULT_BOLD);
                break;

            // When the user releases the Button
            case MotionEvent.ACTION_UP:
                btn.setTypeface(Typeface.DEFAULT);
                break;
        }
        return false;
    }
});

1

Bạn có thể đạt được điều đó bằng cách đặt kênh alpha màu.

Bảng màu giống như #AARRGGBB này, A là viết tắt của kênh alpha (trong suốt), R là màu đỏ, G là màu xanh lá cây và B là màu xanh lam.


1

Bước 1: Tạo một tệp tài nguyên mới trong drawable và sao chép dán

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

    <stroke android:color="#fff" android:width="2dp"/>
    <corners android:radius="25dp"/>
    <padding android:right="15dp" android:top="15dp" android:bottom="15dp" android:left="15dp"/>
</shape>

lưu nó dưới dạng NútUI (giả sử)

Bước 2: Áp dụng UI cho nút xml

<Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="join the crew"
  android:background="@drawable/ButtonUI"
  android:textColor="#fff"/>

0

Mã số:

button.setVisibility(View.INVISIBLE);

Xml:

android:background="@android:color/transparent"

0

Chúng ta có thể sử dụng thuộc tính android: nền trong Nút xml như bên dưới.

android:background="?android:attr/selectableItemBackground"

Hoặc chúng ta có thể sử dụng phong cách

style="?android:attr/borderlessButtonStyle" cho nền trong suốt và bóng ít.


-2

Bạn áp dụng màu nền như transparent(light gray)khi bạn nhấp vào nút.

ButtonName.setOnClickListener()

Trong phương pháp trên, bạn đặt màu nền của nút.


6
Lo lắng rằng điều này đã được nâng cao. Đừng làm điều này, xin vui lòng. Người duy trì trong tương lai sẽ nguyền rủa tên của bạn. Đặt nền với bộ chọn và có một màu / có thể vẽ để nhấn và một màu không. Đừng viết mã để thay đổi nó trong trình nghe - đó KHÔNG phải là cách thực hiện.
themightyjon

-2

Bạn có thể làm điều đó một cách dễ dàng bằng cách thêm thuộc tính bên dưới vào tệp xml. Mã này đã được thử nghiệm nhiều thời gian.

android:background="@android:color/transparent"

2
Tại sao thêm câu trả lời này? Giải pháp này đã có trong hai câu trả lời khác, bao gồm câu trả lời có nhiều phiếu nhất.
Makyen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.