java - TextView 和 ImageView 脱离 LinearLayout

标签 java android android-layout

我正在构建一个带有 TextView、ScrollView 和 LinearLayout 的 Android 应用程序,我想使用 Java 将一个 TextView 和一个 ImageView 添加到这个 LinearLayout,但它们都位于布局之外。

这是我的 Activity XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/galaxy"
tools:context=".Planet">

<TextView
    android:id="@+id/planets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/purple"
    android:text="@string/planets"
    android:textAlignment="center"
    android:textColor="#000000"
    android:textSize="36sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.05" />

<ScrollView
    android:id="@+id/scroll"
    android:layout_width="409dp"
    android:layout_height="646dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0">

    <LinearLayout
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical" />
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

这是我用来生成和添加 TextView 和 ImageView 的代码:

public class MainActivity extends AppCompatActivity {

private ArrayList<Planet> planets = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Planet mercury = Planet.getPlanetFromResources(0, getResources());
    planets.add(mercury);
    addPlanetToUI(mercury);


}


public void addPlanetToUI(final Planet planet){

    int color = getResources().getColor(R.color.yellow);

    LinearLayout linear = findViewById(R.id.linear);
    linear.setOrientation(LinearLayout.VERTICAL);
    linear.setWeightSum(20f);

    LinearLayout.LayoutParams lp = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
    LinearLayout.LayoutParams lp1 = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
    LinearLayout.LayoutParams lp2 = new 
    LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);

    LinearLayout horizontal = new LinearLayout(this);
    horizontal.setWeightSum(6f);
    horizontal.setOrientation(LinearLayout.HORIZONTAL);
    lp.weight = 10f;
    horizontal.setLayoutParams(lp);

    ImageView iv = new ImageView(this);
    lp1.weight = .75f;
    iv.setImageDrawable(getDrawable(planet.getImgSmallResourceValues()));
    iv.setLayoutParams(lp1);


    TextView tv = new TextView(this);
    lp2.weight= .5f;
    tv.setText(planet.getName());
    tv.setBackgroundColor(color);
    tv.setTextSize(40);
    tv.setLayoutParams(lp2);

    horizontal.addView(iv);
    horizontal.addView(tv);
    linear.addView(horizontal);


}
}

这是结果:

The ImageView and the TextView are outside of the LinearLayout.

最佳答案

这并不是说您的元素超出了布局。问题是您的 ScrollView父级顶部有一个顶部约束

将 ScrollView 顶部约束 (app:layout_constraintTop_toTopOf="parent") 更改为:

app:layout_constraintTop_toBottomOf="@id/planets"

由于您的布局容器是 ConstraintLayout,元素之间可以重叠。

关于java - TextView 和 ImageView 脱离 LinearLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61463549/

相关文章:

android - 如何在 Android 的 GridView 中集中最后一个不均匀的行?

android - Cardview 中的 ConstraintLayout 添加空白

android - ViewHolder Android 的 onTouch 方法

java - 当应用程序部署在 Eclipse 外部时,调用 JSP 文件会出现 NoSuchMethodError

java - 我的应用程序不断停止。我该如何解决这个问题?

java - 递归遍历HashMap?

Android HLS Streaming - 不同的 Android 版本在 Stream 中加载不同的位置

android - 我如何显示然后删除 android 进度对话框

java - Ubuntu 中安装 Java8 失败 : Command Not Found/E: Sub-process/usr/bin/dpkg returned an error code (1)

java - 如何保护用户页面免受暴力攻击