异常WRAP_CONTENT行为



应该WRAP_CONTENT这样做:

视图请求的高度或宽度的特殊值。WRAP_CONTENT意味着视图希望足够大以容纳自己的内部内容,同时考虑自己的填充。

但现实是不同的

如果创建一个高度很大的长文本视图,大于屏幕高度,则应用于该文本视图高度WRAP_CONTENT具有错误行为,因为将文本视图高度限制为屏幕高度。

android:layout_height="wrap_content"

为什么WRAP_CONTENT会有这种错误的行为?

如何设置为视图具有其内容的大小而不受屏幕高度的限制?

完整的XML文件(这是游戏片尾标题的屏幕,文本将被动画化,因为它隐藏在屏幕下方):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/creditsTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/credits_big"
android:textAlignment="center"
android:textColor="@color/font"
android:textSize="@dimen/medium_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>

请尝试以下操作以获取文本视图中文本的真实高度,并调整视图大小以匹配。

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mainLayout.doOnLayout {
val tv = findViewById<TextView>(R.id.creditsTextView)
val layout = tv.layout
val lp = tv.layoutParams
lp.height = layout.height
tv.layoutParams = lp
}
}
}

虽然这有效,但让我感到有点不安。您可能需要查看其他方法来完成积分滚动。

相关内容

  • 没有找到相关文章

最新更新