android layout_width باستخدام لون مخصص لخلفية الزر أثناء استخدام سمة selectableItemBackground



android:padding (4)

ما عليك سوى تحريك اللون المطلوب في المستوى الخارجي / الأصل ، على سبيل المثال "لون / أحمر" هو لون الزر:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/Red"
        android:layout_weight="1">

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/selectableItemBackground"
            android:gravity="center"
            android:text="Hello"
            android:textColor="@color/White"/>
    </LinearLayout>

أحاول استخدام

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

للحصول على الزر الخاص بي للقيام بالتأثيرات المناسبة لكل نسخة أندرويد مثل الامتداد ، إلخ.

ولكن هذا ينتج زر بلون رمادي عندما أحتاج إلى لون مختلف.

كيف يمكنني تجاوز هذا اللون الافتراضي؟


Answer #1

باستخدام هذه الطريقة ، يمكنك تخصيص لون تأثير التموج. أولاً ، يجب عليك إنشاء ملف xml في دليل الموارد القابل للدروس. إنشاء ملف ripple_effect.xml وإضافة التعليمة البرمجية التالية. أستخدم لون الخلفية كـ Red.

RES / drawable / ripple_effect.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#af0c0e"
    tools:targetApi="lollipop">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#af0c0e" />
        </shape>
    </item>
</ripple>

وتعيين الخلفية إلى ملف مورد drawable أعلاه. يشبه الرمز النهائي لنشاط تنسيق xml هذا. RES / تخطيط / ripple_animation.xml

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

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_marginLeft="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:paddingBottom="30dp"
    app:cardBackgroundColor="#e7e7e7"
    android:id="@+id/cardview"
    xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:background="@drawable/ripple_effect">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:paddingBottom="5dp">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Pending"
                android:layout_weight="1"
                 android:layout_marginBottom="2dp"
                android:textSize="25dp"
                android:textColor="#d11010"
                android:id="@+id/txtpending" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Assigned to:"
                android:layout_marginLeft="20dp"
                android:textColor="#ff000000"
                android:id="@+id/txtassigned"
                android:layout_weight="1"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingBottom="5dp"
            android:paddingTop="5dp"
            android:layout_marginLeft="16dp">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Student Name"
                android:id="@+id/txtstudentname"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Student Number"
                android:id="@+id/txtstudentnumber"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Parent Name"
                android:id="@+id/txtparentname"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Parent Number"
                android:id="@+id/txtparentnumber"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Transfer Status"
                android:id="@+id/txttransfer"/>

        </LinearLayout>
    </LinearLayout>
</LinearLayout>
    </android.support.v7.widget.CardView>

الآن ، تأثير مضاعف اللون الأحمر.


Answer #2

بدلاً من استخدام؟ android: attr / selectableItemBackground يمكنك إنشاء ملف xml في drawable في مجلد مع المحتوى التالي.

<item 
    android:state_pressed="true"
    android:drawable="@color/orange"/>
<item 
    android:state_enabled="false"
    android:drawable="@color/default"/>
<item
    android:drawable="@color/default"/>

</selector>
Updated: so you save this files as : btn_drawable.xml in drawable folder.

Simply replace ?android:attr/selectableItemBackground with *@drawable/btn_drawable.xml*

Answer #3

إذا قمت بقراءة الكود المصدري لـ Button.java ، فسترى أنه فئة فرعية من TextView.java . لقد تقدمت بطريق بسيطة للمشكلة في السؤال.

<LinearLayout android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:background="#1f5050">

       <TextView android:layout_width="some_dp"
                 android:layout_height="some_dp"
                 android:id="@+id/button"
                 android:background="?android:selectableItemBackground" />

</LinearLayout>

في الكود:

button.setOnClickLisetener(new Onclicklistener() {
    // do your stuff here
}

سيكون أفضل بكثير إذا كان شخص ما يمكن توسيع الفئة TextView وجعل زر مخصص مع الميزة في السؤال.

ملاحظة: بلدي minsdk هو 14. أيضا ، يعمل تأثير تموج المصاصة على ما يرام





android-layout