Как показать пользовательский вид, созданный с помощью тега слияния, в окне предварительного просмотра Android Studio - PullRequest
0 голосов
/ 08 октября 2019

Когда у меня есть макет, который включает в себя пользовательский вид, как я могу получить содержимое своего пользовательского вида, которое будет отображаться в окне предварительного просмотра в Android Studio?

У меня есть пользовательский вид, основанный на LinearLayout:

class MyCustomView:LinearLayout {
        constructor(context:Context?):super(context)
        constructor(context:Context?, attrs:AttributeSet?):super(context, attrs) {
            initialize(context, attrs)
        }

        constructor(context:Context?, attrs:AttributeSet?, defStyleAttr:Int):super(context, attrs, defStyleAttr) {
            initialize(context, attrs)
        }

        constructor(context:Context?, attrs:AttributeSet?, defStyleAttr:Int, defStyleRes:Int):super(context, attrs, defStyleAttr, defStyleRes) {
            initialize(context, attrs)
        }

        fun initialize(context:Context?, attrs:AttributeSet?) {
            LayoutInflater.from(context).inflate(R.layout.my_custom_view_layout, this)
        }
    }

Он раздувает макет, корнем которого является тег <merge/>:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:parentTag="LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
    android:id="@+id/message_display"
    android:text="hello world"
    />
</merge>

Я включаю видкак элемент в моем основном файле макета:

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

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/txt_before"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="before"/>

        <com.my.app.MyCustomView
            android:id="@+id/custom_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/txt_after"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="before"/>
</LinearLayout>

Когда я просматриваю свой основной макет в окне предварительного просмотра, содержимое моего пользовательского представления не отображается. Я хотел бы видеть мой пользовательский вид, включая TextField "Hello World". Как мне этого добиться?

1 Ответ

0 голосов
/ 09 октября 2019

Вы можете попробовать перестроить свой проект, но я думаю, что вам нужно добавить другие виды программно.

CustomLayout extends LinearLayout{
    public CustomLayout(Context context) {
        super(context);

        //Add your view to this layout
        this.add(new MyCustomFirstView());

        //Add other views the same way and customize LayoutParams here...
    }
}

Надеюсь, это помогло:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...