Проверьте, у какого типа ребенка есть линейный вывод

#kotlin #view #textview #android-linearlayout

Вопрос:

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

В моем линейном макете у меня есть представление и текстовое представление, и в приведенном ниже коде, когда ребенок является textview, я получаю истину в обоих предложениях(я имею в виду, что я получаю истину в представлении-это представление, а представление-это TextView, если ребенок в этот момент является textview). И я хочу знать, как я могу получить ложь, когда предложение » вид «- это «Вид», если ребенок является textview.

Вот где я пытаюсь проверить тип ребенка:

 private fun selectFromLayout(ll: LinearLayout, select: Boolean) {
    val childCount = ll.childCount
    for (i in 0 until childCount) {
        val view = ll.getChildAt(i)
        if (view is View) {
            if (select) {
                view.background = ContextCompat.getDrawable(context, R.drawable.back_select)
            } else {
                view.setBackgroundResource(R.color.white)
            }
        }

        if (view is TextView) {
            if (select) {
                view.setTextColor(ContextCompat.getColor(context, R.color.gray_dark))
                view.typeface = ResourcesCompat.getFont(context, R.font.montserrat_medium)
            } else {
                view.setTextColor(ContextCompat.getColor(context, R.color.gray_medium))
                view.typeface = ResourcesCompat.getFont(context, R.font.montserrat_regular)
            }
        }
    }
}
 

Линейная планировка:

        <LinearLayout
        android:id="@ id/btn_tab1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="?attr/selectableItemBackground"
        android:focusable="true"
        android:gravity="bottom"
        android:orientation="vertical">

        <TextView
            android:id="@ id/tv_tab1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:gravity="center"
            app:textSize="10sp"
            app:textType="regular"
            tools:text="Próximas" />

        <View
            android:id="@ id/tab1_shadow"
            android:layout_width="match_parent"
            android:layout_height="2dp" />

    </LinearLayout>
 

Ответ №1:

Нет необходимости проверять is View , так как это всегда верно, так как все представления в Android распространяются из View класса.

 private fun selectFromLayout(ll: LinearLayout, select: Boolean) {
    val childCount = ll.childCount
    for (i in 0 until childCount) {
        val view = ll.getChildAt(i)
        if (view is TextView) {
            if (select) {
                view.setTextColor(ContextCompat.getColor(context, R.color.gray_dark))
                view.typeface = ResourcesCompat.getFont(context, R.font.montserrat_medium)
            } else {
                view.setTextColor(ContextCompat.getColor(context, R.color.gray_medium))
                view.typeface = ResourcesCompat.getFont(context, R.font.montserrat_regular)
            }
        } else {
            if (select) {
                view.background = ContextCompat.getDrawable(context, R.drawable.back_select)
            } else {
                view.setBackgroundResource(R.color.white)
            }
        }
    }
        
}