【问题标题】:Android LinearLayout cannot add multiple views programAndroid LinearLayout 无法添加多视图程序
【发布时间】:2013-12-15 22:37:11
【问题描述】:

我正在尝试使用此代码添加多个自定义视图(现在它们是简单的矩形)

            //Defining the layout

    HandLayout = new LinearLayout(this);
    HandLayout.setOrientation(LinearLayout.HORIZONTAL);
    HandLayout.setBackgroundColor(getResources().getColor(R.color.bg_hand));
    HandLayout.setLayoutParams(new   LayoutParams(getResources().getInteger(R.integer.dim_hand_width), getResources().getInteger(R.integer.dim_hand_height)));


            //Some more code

    int dx = getResources().getInteger(R.integer.dim_cardslot_width);
    for (int i = 0; i < 6; i++){
        Card c = new Card(this,i);
        HandLayout.addView(c);  
        c.setX(i*dx);
    }

问题在于,我只看到第一个矩形,而不是让 6 个矩形一个接一个。

我认为矩形在那里,但在第一个绘制的矩形“后面”。我如何告诉视图将它们 dx 向右“移动”?

感谢您的帮助

编辑:我认为问题出在 Card Class 代码上。在一位用户提出建议后,我尝试添加 TextViews 并且它们起作用了。这是卡片类的代码(注意唯一不存在的代码是一堆常量整数的声明)。

public Card(Context context, int id) {
    super(context);
    // TODO Auto-generated constructor stub
    borders = new Rect(0,0,
            getResources().getInteger(R.integer.dim_cardslot_width),
            getResources().getInteger(R.integer.dim_cardslot_height));

    offw = (getResources().getInteger(R.integer.dim_cardslot_width) - getResources().getInteger(R.integer.dim_card_width))/2;
    offh = (getResources().getInteger(R.integer.dim_cardslot_height) - getResources().getInteger(R.integer.dim_card_height))/2;

    cborders = new RectF((float)offw, (float)offh, 
            (float)getResources().getInteger(R.integer.dim_card_width), 
            (float)getResources().getInteger(R.integer.dim_card_height));

    ntext = Typeface.create(Typeface.MONOSPACE,Typeface.NORMAL);
    paint = new Paint();
}

protected void onDraw(Canvas canvas){
    paint.setColor(getResources().getColor(R.color.bg_card));
    canvas.drawRect(borders, paint);
    paint.setColor(getResources().getColor(R.color.main_card));
    canvas.drawRoundRect(cborders, rad, rad, paint);

    paint.setColor(getResources().getColor(R.color.card_text));
    paint.setTextSize(14);
    canvas.drawText("Card: " + String.valueOf(ID),offw,TopOffset+CharHeight,paint);

}

【问题讨论】:

  • 你确定你的布局没有在屏幕右边,因为你设置了水平方向。
  • 我的布局是彩色涂层的(所以我可以看到它的统计数据和结束位置)它具有我指定的确切尺寸。现在视图可能位于屏幕左侧(显示的卡片位于屏幕左侧)。但是,如何检查/解决这个问题?
  • 你能不能也放一张你的输出图片

标签: android layout view


【解决方案1】:

它们不是“落后”,它们是“相邻”,我认为每个视图的宽度都是 fill_parent 这就是为什么你只能看到一个视图,尝试将你的父布局放在 scrollView 中并检查区别

【讨论】:

  • 我不认为是这样。 HandLayout 的宽度是卡片视图宽度的 6 倍。添加 6 个视图应该在另一个矩形旁边显示一个矩形,因为有足够的空间。我可以在矩形结束后看到布局的颜色。所以空间很大。我也试过 HandLayout.addView(c,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));它是一样的。不过我会试试的。
  • 尝试删除 setX() 行,linearlayout 会将您的视图水平放置,您不需要 setX() 方法,也只是为了验证,尝试在布局中添加按钮,看看它们是否会显示向上
  • 原代码没有setX这一行。我添加它是因为我一直只看到一张卡片。我会尝试使用按钮。
  • 成功了。我将卡片更改为一个简单的 TextView,单词并排显示。那么这是什么意思?我将发布课程的代码
  • 你可以忽略整个视图类,并制作一个 XML 布局作为你的视图,然后将其膨胀并进行修改,然后将其添加到布局中,这就是我的做法跨度>
【解决方案2】:

XML 解决方案:

假设你的卡片设计如下所示

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

   <TextView
        android:id="@+id/value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

</LinearLayout>

在您的 java 代码中:

for (int i = 0; i < 6; i++){
   View cardView = LayoutInflater.from(getActivity()).inflate(R.layout.xml_above, null);
   TextView tv = cardView.findViewById(R.id.value));
   tv.setText("your text");

   //if you have click listeners
   tv.setOnClickListener(...);

   HandLayout.addView(cardView); 

}

看起来很简单

【讨论】:

  • 谢谢。然而我还是不明白。我想要做的是绘制一个特定尺寸的矩形。在该矩形内部是另一个彩色矩形,在中间(居中)的几行等宽文本内部和下方是一行值,所有这些值都会因卡而异。在您的代码中,我应该在哪里告诉 TextView 按我想要的方式绘制?只是为了清楚这张牌是按我的意愿画的。但是我注释了代码并没有包含它。
  • 我相信你可以通过为你的不同项目(矩形作为线性布局/相对布局...)制作不同的xml布局(如上所示)来实现这一点,然后根据你的需要一一膨胀,我知道这看起来很复杂,而且我没有找到更好的方法
  • 哦,好的。然后它不会工作。程序完成后,我需要定义大约 600 张卡片(来自文本文件)。我的想法是继承类,然后根据文本文件说明进行绘制。必须有一种方法可以绘制两个矩形并让它们并排显示.....
  • 将卡片信息保留在您定义的类中,但对于绘图部分将其保留为 xml
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多