Ich habe dem Namen eine benutzerdefinierte Ansicht für meine app habe, ist AvatarView
:Warum ist Android Studio-Designer meine benutzerdefinierte Ansicht in sich verschachtelt angezeigt wird, während es nicht
<?xml version="1.0" encoding="utf-8"?>
<com.ulouder.views.AdvancedRelativeLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_gravity="center_horizontal"
android:layout_margin="0dp"
android:padding="0dp"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CP"
android:id="@+id/initialsView"
android:layout_alignTop="@+id/avatarView"
android:layout_alignLeft="@+id/avatarView"
android:layout_alignBottom="@+id/avatarView"
android:layout_alignRight="@+id/avatarView"
android:background="@drawable/avatar_background"
android:textColor="@color/white"
android:gravity="center"
android:textStyle="bold"
android:textSize="8sp" />
<com.makeramen.roundedimageview.RoundedImageView
app:riv_corner_radius="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/avatarView"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="4dp"
android:layout_marginLeft="4dp"
android:layout_marginBottom="4dp"
app:riv_border_color="@color/lightGray"
app:riv_border_width="0.2dp" />
</com.uLouder.views.AdvancedRelativeLayout>
AdvancedRelativeLayout
ist nur eine übergeordnete Klasse von RelativeLayout
mit einem kleine Reparatur, nichts besonderes dort. Dann habe ich eine Ansicht, die meine benutzerdefinierte Ansicht verwendet:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<com.ulouder.views.AvatarView
android:layout_width="50dp"
android:layout_height="50dp"/>
</LinearLayout>
Nichts auch nicht. Aber in der Entwurfsansicht des zweiten Layout XML, erhalte ich dieses:
Der Editor zeigt meiner Ansicht Hierarchie wie es eine verschachtelte Instanz von sich selbst hat, während klar ist es nicht. Wenn ich eines lösche, werden beide gelöscht. Wenn ich Attribute auf einem von ihnen deklariere, bekommt es auch ein anderer. Sie sind eindeutig die gleiche Instanz. Die einzige Ausnahme ist das Festlegen einer ID. Dann verschwindet das Problem und nur eine einzelne Instanz wird wie erwartet angezeigt.
Ich habe das Projekt neu erstellt, Android Studio neu gestartet, aber es ist immer noch das gleiche. Was mache ich falsch?
UPDATE: Nein, jetzt, nach der Bearbeitung id
, geht das Problem immer noch weiter.
UPDATE 2: Es ist nicht nur ein Layout, so dass ich <include>
Tag nicht verwenden kann. Es ist eine benutzerdefinierte Ansicht, die benutzerdefinierte Logik enthält.
UPDATE 3: Hier ist meine benutzerdefinierte Ansicht (relevanter) Code:
public class AvatarView extends FrameLayout {
public AvatarView(Context context) {
super(context);
init();
}
TextView initialsView;
RoundedImageView imageView;
public AvatarView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
void init(){
inflate(getContext(), R.layout.view_avatar, this);
initialsView = (TextView) findViewById(R.id.innerInitialsView);
imageView = (RoundedImageView) findViewById(R.id.innerImageView);
}
@SuppressWarnings("SuspiciousNameCombination")
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec); //always square
imageView.setCornerRadius(widthMeasureSpec/2f);
initialsView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, widthMeasureSpec * 30f);
}
}
UPDATE 4: Es scheint, dass dies überall geschieht ich meine benutzerdefinierten AvatarView
Klasse setzen, nicht nur an einem Ort.
Auf jeden Fall seltsam. Ist es möglich, dass es in Ihrer Aktivitätsklasse etwas gibt, das zusätzlich zu der in der XML-Layoutdatei eine Ansicht programmatisch hinzufügt? –
@JoshuaCarmody das war genau das, was ich auch dachte. Es gibt nur einen Platz, an dem ich ein einzelnes XML aufblase, und es ist auf dem Initialisierungscode, der gerade vom Konstruktor (offensichtlich einmal) und sonst nirgends aufgerufen wird. und das erste XML ist das, das ich in meiner Frage gepostet habe. –
Haben Sie dasselbe mit einer anderen 'CustomView' in einer anderen Datei versucht? –