2017-07-14 2 views
0

Ich baue customView linearLayout erweitern und einfache 3 Kinder (2 TextView und ImageView). Ich erstelle diese Ansicht dynamisch im Code und füge sie dem übergeordneten LinearLayout hinzu. Diese Ansicht hat Hintergrund, so kann ich leicht auf dem Bildschirm erkennen, dass sie an ihrer Stelle richtig aufgeblasen ist, aber keines der Kinder ist nicht sichtbar. Ich habe LayoutInspector und es zeigt, dass alles richtig gefassten ist (Textwert Textviews und Bild zu Image), aber irgendwie, wenn ich versuche, sich auf Inspektoren zu finden sind sie als kleiner Punkt über meine Custom gezeigt:Custom LinearLayout - childs nicht sichtbar

enter image description here

Meine CustomView heißt DayTileView und dies ist quadratisch mit grauem Hintergrund. Wie Sie auf dem Inspektor auf der linken Seite sehen können, sind Kinder mit Inhalt gefüllt. Layout-Ansicht:

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <merge> 
     <TextView 
       android:id="@+id/day" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:textColor="@android:color/white" 
     /> 

    <TextView 
      android:id="@+id/dayName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:textColor="@android:color/white" 
    /> 

    <ImageView 
      android:id="@+id/padlock" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:src="@drawable/ic_padlock" 
    /> 
</merge> 
</layout> 

Und seinen Code:

public class DayTileView extends LinearLayout { 
private DayTileBinding mBinding; 

public DayTileView(Context context) { 
    super(context); 
    init(); 
} 

public DayTileView(Context context, @Nullable AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public DayTileView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(); 
} 

private void init() { 
    mBinding = DataBindingUtil.inflate(LayoutInflater.from(getContext()), R.layout.day_tile, this, true); 
    setOrientation(VERTICAL); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); 
    setMeasuredDimension(width, width); 
} 

public void setDay(int day, int month, int year) { 
    DateTime settedDay = new DateTime().withYear(year).withMonthOfYear(month).withDayOfMonth(day); 
    mBinding.day.setText(String.valueOf(day)); 
    String dayName = settedDay.dayOfWeek().getAsText(); 
    mBinding.dayName.setText(dayName); 
    boolean isWeekend = settedDay.dayOfWeek().get() == 6 || settedDay.dayOfWeek().get() == 7; 
    setBackgroundColor(ContextCompat.getColor(getContext(), isWeekend ? R.color.weekend_bg : R.color.weekday_bg)); 
} 

}

Seine Verwendung in einem anderen Custom die auch Linearlayout aber wiht horizontale Ausrichtung (PlannedDayView auf Inspektor):

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <merge> 

     <*.customViews.DayTileView 
       android:id="@+id/dayTile" 
       android:layout_width="0dp" 
       android:layout_weight="0.2" 
       android:layout_height="wrap_content"/> 

     <LinearLayout 
       android:id="@+id/container" 
       android:orientation="vertical" 
       android:layout_weight="1.2" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content"/> 

    </merge> 
</layout> 

Hat jemand eine Idee, was könnte dies (Kinder außerhalb der Sicht) sein? Wenn ich Merge für LinearLayout mit vertikaler Ausrichtung und gleichem Hintergrund ersetze, ist alles im Design-Modus des Layouts korrekt sichtbar, also sollte es funktionieren.

BEARBEITEN: Ich fand heraus, dass, wenn ich während View Initiation Padding Top auf 10px gesetzt, dann dot bewegt sich nach unten. So sieht es aus wie aus einigen Gründen Android hat nicht richtig aufgeblasen TextViews und ImageView

+0

Versuchen mmmatey

+0

Ich habe Namespace-Deklarationen zum Zusammenführen verschoben, aber es hilft nicht.Ich kann Layout-Tags nicht löschen, weil ich keine Bindung erhalten würde.Alle meine customViews werden auf diese Weise erstellt und sie sind Arbeiten. Nur dieses ist chaotisch – masztalski

+0

Ok, was ist mit Gewichten, wenn Sie verschiedene Gewichte in DayTileView versuchen. – mmmatey

Antwort

0

Ich fand heraus, was das Problem war: Ich überholte OnMeasure und nicht unter Ansichten gemessen. Früher benutzte ich einen solchen Code, um die quadratische View nicht quadratisch ViewGroup zu machen.

Corrected Code:

final int width = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec); 
    setMeasuredDimension(width, width); 
    super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY)); 

Nach korrekter Breite und Höhe für View Einstellung muss ich mit neuen ganze Sicht messen Measurespec

Verwandte Themen