2017-03-15 4 views
0

Ich habe eine ziemlich grundlegende Idee und Erfahrung mit der Erstellung von benutzerdefinierten Android-Steuerelemente.Benutzerdefinierte Android-Steuerelemente mit Elementen

Ich weiß, dass ich ein benutzerdefiniertes Steuerelement erstellen kann, das im Grunde ein Layout mit einer Reihe von Steuerelementen darin ist, Attribute hinzufügen und jede Art von Logik, die ich möchte.

Aber jetzt brauche ich etwas anderes. Ich habe eine App, in der alle meine EditText Elemente eine graue horizontale Linie unter ihnen haben. Ich weiß, dass dies mit backgroundTint erreicht werden kann, aber dies ist nur für api 21 und mehr.

Anstatt diese graue Linie unter jedem EditText Element, das ich verwende, hinzuzufügen, möchte ich ein benutzerdefiniertes Element erstellen, das EditText erweitert, aber auch diese graue Linie hat. Etwas wie folgt aus:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:src="@drawable/gray_divider"/> 

</LinearLayout> 

Und in der Code-behind:

public class MyEditText extends LinearLayout { 

public MyEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    Init(); 
} 

private void Init() { 
    LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.my_edit_text, this); 

    InitViews(view); 
} 

Also mein Problem ist folgendes: Damit MyEditText funktionieren wie ein EditText Ich habe ein Attribut für jedes EditText Attribut erstellen . Ich möchte dies tun:

<MyEditText android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:text_color="@android:color/white" /> 

Ohne etwas in den Code hinter hinzuzufügen. Ist das möglich?

Antwort

0

Für eine gute Übung in diesem Fall, verwenden Sie einen Hintergrund mit der unteren Zeile.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:left="-10dp" 
    android:right="-10dp" 
    android:top="-10dp"> 
    <shape android:shape="rectangle"> 
     <gradient 
      android:angle="270" 
      android:endColor="@color/transparent" 
      android:startColor="@color/transparent" /> 
     <stroke 
      android:width="@dimen/border" 
      android:color="@color/border" /> 
     <corners android:radius="@dimen/border" /> 
    </shape> 
</item> 

eine .xml-Ressource Stellen und setzen es in Drawable folder.Eg border_bottom.xml

Und für Text bearbeiten gerade Hintergrund geben wie

android:background="@drawable/border_bottom" 

Hoffe, es hilft.

+0

Funktioniert wie Charme! Sehr elegant auch. Änderte den Code ein bisschen. '

' – TomerAgmon1