Я разрабатываю приложение в Android Studio. В предварительном просмотре это выглядит так, как я хочу, но при сборке приложения есть LinearLayout, который содержит два TextView, которые выглядят меньше, и я не понимаю, почему
Это элемент просмотра Recycler:
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/friend_layout"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:id = "@+id/profile_picture"
android:layout_width = "44dp"
android:layout_height = "44dp"
android:src = "@drawable/head" />
<LinearLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "vertical">
<TextView
android:id = "@+id/name"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginStart = "1dp"
android:gravity = "left"
android:paddingLeft = "2dp"
android:paddingRight = "2dp"
android:textColor = "@color/white"
android:textSize = "16sp"
android:textStyle = "bold"
tools:text = "Guillermo Rodriguez" />
<TextView
android:id = "@+id/friend_position"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:gravity = "left"
android:text = "delantero"
android:textColor = "@color/white"
android:textSize = "13sp" />
</LinearLayout>
Вот как это выглядит: https://photos.app.goo.gl/BgNQhgpNKbgEGCCR6 и мне нужно, чтобы текст заполнил всю ширину
Я ожидаю увидеть оба TextView до конца экрана, но они заканчиваются до середины. Есть идеи?
@Peregreen Я неправильно скопировал. Да, это match_parent, но происходит то же самое. Я поставил номер, чтобы проверить это, но это не сработало. Любая другая идея?
@fitonga, если этот макет предназначен для элемента внутри RecyclerView, также имеет значение, как вы его надуваете. Если вы не предоставите parent для надувания для onCreateViewHolder, то он не сможет надуть корневые LayoutParams и заменит ваш match_parent на wrap_content, что потенциально может повлиять на внутренний LinearLayout. Не могли бы вы опубликовать код надувания предмета?
@Peregreen это метод onCreateViewHolder. Как вы думаете? Вам нужно какое-то другое? Переопределить общедоступный ViewHolder onCreateViewHolder (родитель ViewGroup, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from (context); View view = layoutInflater.inflate(R.layout.recycler_item_invite_friend, parent, false); вернуть новый ViewHolder (представление); }
@fitonga хм, интересно, выглядит хорошо. Очень странно, я бы порекомендовал использовать Layout Inspector и проверить, какие реальные параметры макета у вас есть в вашем представлении. Это очень удобный инструмент для такого рода расследований: developer.android.com/studio/debug/макет-инспектор
Поверьте, если бы вы использовали ConstraintLayout, ваша жизнь была бы проще с этим. У меня были похожие проблемы с плотиной с LinearLayout. Глядя на ваш код, все выглядит нормально
Если я правильно понял ваш вопрос, вы должны захотеть, чтобы два TextView заполнили всю высоту, не так ли?
В этом случае в обоих ваших TextView измените атрибут layout_height
на 0dp
и добавьте к ним android:layout_weigth=0.5
. Это заставит их заполнить всю высоту вашего LinearLayout, какой бы она ни была, и они будут делить пространство прямо посередине.
Нет, я хочу, чтобы оба вида занимали всю ширину! Что происходит со мной, так это то, что если один из текстов "delantero", он появляется: "delan" и вниз "tero", и это происходит с обоими текстами, есть точка, где он разделяет его и вырезает. Я не знаю, почему
Вот как это выглядит: photos.app.goo.gl/BgNQhgpNKbgEGCCR6 и мне нужно, чтобы текст заполнил всю ширину
Я рекомендую вам использовать атрибут веса LinearLayout
. установите корень LinearLayout
на match_parent
. и ваш вложенный LinearLayout
и оба TextView
layout_height
к 0dp
и их weight
к 1
вот отредактированный код:
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/friend_layout"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "horizontal">
<de.hdodenhof.circleimageview.CircleImageView
android:id = "@+id/profile_picture"
android:layout_width = "44dp"
android:layout_height = "44dp"
android:src = "@drawable/head" />
<LinearLayout
android:layout_width = "0dp"
android:layout_height = "match_parent"
android:layout_weight = "1"
android:orientation = "vertical">
<TextView
android:id = "@+id/name"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:layout_marginStart = "1dp"
android:gravity = "left"
android:paddingLeft = "2dp"
android:paddingRight = "2dp"
android:textColor = "@color/white"
android:textSize = "16sp"
android:textStyle = "bold"
tools:text = "Guillermo Rodriguez" />
<TextView
android:id = "@+id/friend_position"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:gravity = "left"
android:text = "delantero"
android:textColor = "@color/white"
android:textSize = "13sp" />
</LinearLayout>
</LinearLayout>
@fitonga извините, мой плохой, я потерял ширину и высоту вложенного LinearLayout. Я отредактировал свой ответ. Попробуйте новый код и дайте мне знать, как он работает.
Теперь у меня та же ошибка, что и в первый раз
@fitonga, можете ли вы загрузить скриншот вашего завышенного макета? и объясните более подробно, как именно вы ожидаете, что он будет себя вести?
Вот как это выглядит: photos.app.goo.gl/BgNQhgpNKbgEGCCR6 и мне нужно, чтобы текст заполнил всю ширину
Я взглянул на ваше изображение и внес некоторые изменения в код, попробуйте, дайте мне знать, как это работает, я изменил ширину и высоту TextViews.
Я наблюдаю за этим с инспектором компоновки и понял, что проблема в LinearLayour, как вы видите, слышите: photos.app.goo.gl/bB3jFJqSHmvGSHfR7. Есть идеи, как это исправить?
@fitonga я посмотрю на это прямо сейчас и дам вам знать
То же самое, не знаю в чем проблема, но думаю может дело не в этом .xml... В превью LinearLayout выглядит нормально, а в инспекторе выглядит не так, как в реальности, как в фото я загрузил
@fitonga У меня были похожие проблемы с инфляцией с LinearLayout раньше, попробуйте изменить friend_layout (корневой LinearLayout) на RelativeLayout и посмотреть, как это происходит, дайте мне знать.
Кстати, @fitonga проверьте, какую ориентацию вы используете для менеджера линейной компоновки вашего RecyclerView.
Это не сработало и с RelativeLayout. Где находится ориентация менеджера Linear Layout?
@fitonga загрузите использованный вами RelativeLayout, а также код LinearLayoutManager. Я посмотрю на это.
@Override public ViewHolder onCreateViewHolder (родитель ViewGroup, int viewType) { LayoutInflater layoutInflater = LayoutInflater.from (context); View view = layoutInflater.inflate(R.layout.recycler_item_invite_friend, parent, false); вернуть новый ViewHolder (представление); }
@Override public void onBindViewHolder (держатель ViewHolder, позиция int) { ViewGroup.LayoutParams lp =holder.friendLayout.getLayoutParams(); if (lp instanceof FlexboxLayoutManager.LayoutParams) { FlexboxLayoutManager.LayoutParams flexboxLp = (FlexboxLayoutManager.LayoutParams)holder.friendLayout.getLayoutParams(); flexboxLp.setFlexGrow(1.0f); }
если (selectedPlayersGlobal.contains(friends.get(position).id)) { selections.put(position, true); }holder.update(friends.get(position), position); }
Для относительного макета я просто меняю «LinearLayout» на «RelativeLAyout».
@fitonga Вы пытались установить для layoutInflater.inflate() для attachToRoot значение true ?
@fitonga, когда вы изменили LinearLayout на RelativeLayout, был ли результат точно таким же?
Пожалуйста, проверьте, имеет ли ваш RecycleView
правильную ширину (например, match_parent
) и может ли он растягиваться на всю ширину. Не могли бы вы предоставить код xml с RecycleView
?
я думаю, вы установили recyclerview на определенную ширину. попробуйте изменить ширину в соответствии с родителем. Я рекомендую пользователю ограничивать макет, чтобы избежать вложенных групп просмотра. так:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:id = "@+id/friend_layout"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
<ImageView
android:id = "@+id/profile_picture"
android:layout_width = "44dp"
android:layout_height = "44dp"
android:src = "@drawable/patient"
app:layout_constraintTop_toTopOf = "parent"
app:layout_constraintStart_toStartOf = "parent"/>
<TextView
android:id = "@+id/name"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_marginStart = "1dp"
android:gravity = "left"
android:paddingLeft = "2dp"
android:paddingRight = "2dp"
android:textColor = "@android:color/white"
android:textSize = "16sp"
android:textStyle = "bold"
tools:text = "Guillermo Rodriguez"
app:layout_constraintTop_toTopOf = "parent"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toEndOf = "@+id/profile_picture"/>
<TextView
android:id = "@+id/friend_position"
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:gravity = "left"
android:text = "delantero"
android:textColor = "@android:color/white"
android:textSize = "13sp"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toEndOf = "@+id/profile_picture"
app:layout_constraintTop_toBottomOf = "@+id/name"/>
Я решил это! Кто-то настроил его с помощью GridLayoutManager, и он должен был быть с LinearLayoutManager. Я изменил его, и он был исправлен.
@fitonga ваш внутренний LinearLayout имеет layout_width 600dp, если ваш экран шире, то он просто имеет ограниченное пространство. Почему бы вам не использовать match_parent для этого, если вы хотите, чтобы он был на весь экран?