首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法使用LayoutInfalter呈现xml布局。我哪里做错了?

无法使用LayoutInfalter呈现xml布局。我哪里做错了?
EN

Stack Overflow用户
提问于 2011-10-27 22:41:54
回答 2查看 259关注 0票数 0

我需要显示一个布局从xml文件,并绘制一些基于矢量的图像在上面。如果执行下面的代码,则会显示除布局之外的所有内容。为什么?我哪里做错了?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class About extends Activity 
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.about); 
    setContentView(new GraphicsView(this));
}

public class GraphicsView extends View
{
    public GraphicsView(Context context)
    {
        super(context);                 
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        Context context;
        context=getContext();

        View aview; 

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
        aview = inflater.inflate(R.layout.about, null);                 

        aview.draw(canvas);

        Path circle = new Path();
        Paint cPaint = new Paint(); 
        cPaint.setColor(Color.LTGRAY);
        circle.addCircle(150, 150, 100, Direction.CW);
        canvas.drawPath(circle, cPaint);
        cPaint.setColor(Color.RED);
        canvas.drawTextOnPath("Some stupid text", circle, 0, 20, cPaint);
    }
}

}

EN

回答 2

Stack Overflow用户

发布于 2011-10-28 05:13:33

在膨胀视图之后,您需要测量它并对其进行布局,以确定其大小,以便可以正确绘制。应该先调用aview.measure()和aview.layout(),然后再调用aview.draw()。

请注意,您永远不应该从onDraw()中膨胀视图。这是非常昂贵和浪费的。同样,您也不应该在onDraw()中创建绘画或路径。

票数 0
EN

Stack Overflow用户

发布于 2011-10-28 14:59:48

另一个论坛给出了另一个答案:

FrameLayout:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class About extends Activity 
 { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.about);

       GraphicsView drawing = new GraphicsView(this);

       FrameLayout container = (FrameLayout) findViewById(R.id.container);
       container.addView(drawing);
    } 

    public class GraphicsView extends View 
    { 
       public GraphicsView(Context context) 
       { 
          super(context);                 
       } 
       @Override 
       protected void onDraw(Canvas canvas) 
       { 
          Path circle = new Path(); 
          Paint cPaint = new Paint(); 
          cPaint.setColor(Color.LTGRAY); 
          circle.addCircle(150, 150, 100, Direction.CW); 
          canvas.drawPath(circle, cPaint); 
          cPaint.setColor(Color.RED); 
          canvas.drawTextOnPath("Some stupid text", circle, 0, 20, cPaint); 
       } 
    } 
 }

然后是XML:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dip" 
    android:id="@+id/container"> 
    <TextView 
        android:id="@+id/about_content" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/about_text" />
</FrameLayout>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7923285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文