有关为Android创建自定义布局的教程?

时间:2011-06-17 14:56:47

标签: android layout viewgroup

我最终想要解决这个问题并希望有人在那里找到解决方案。

我想为Android应用创建自定义布局。理论上这应该是直截了当的,但我找不到有关如何这样做的有用信息。

我正在寻找: 1)关于如何将ViewGroup子类化以创建自定义布局的简单,循序渐进的教程。 2)对内部机制的基本理解,例如,如何访问子视图,如何以及何时要求子视图绘制自己,如何为自定义布局定义xml,如何访问自定义xml属性等。

我看了很多互联网,我只能在它上面找到小花絮,甚至无法开始创建一个子类。

我找到了 1)在http://parleys.com/#id=2191&sl=3&st=5给出了一个演讲,但在几分钟后要求订阅时它会中断。 2)http://developer.android.com/reference/android/view/ViewGroup.html处的API参考,但这并没有提供关于如何真实地实现子类的任何线索。

1 个答案:

答案 0 :(得分:2)

我找到了这个。没有什么是复杂的。

  

Demo

Android支持中没有更多的绝对布局。 我只想要setX方法。 FrameLayout是最佳选择。 看看: Tutorial

FrameLayout允许您设置类似于绝对的位置和尺寸。如果你想要更深入,你需要使用下一个方法:

//对于x和y,您可以使用onCreate

//设置宽度和高度的最佳方式 - 使用帖子   // post方法意味着UI已准备就绪

  VEIW_MAIN = (ViewGroup) findViewById(R.id.activity_main);

   VEIW_MAIN.post(new Runnable() {
            @Override
            public void run() {

                LayoutParams paraBigText = BigText.getLayoutParams();
                Double d24 = 200.0;
                paraBigText.width = d24.intValue();
                BigText.setLayoutParams(paraBigText);
                BigText.setGravity( Gravity.CENTER_HORIZONTAL);

           }
       });

...

ViewTreeObserver vto = SOME_ELEMENT.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()       
{
    public boolean onPreDraw() {

         // changes here
        return true;
    }
}); 

...

如果你需要一些修复,请使用:

 if (EKRAN.WIDTH() <= 480)
            {
                FIX_FOR_480_WIDTH();
            }
            else if (EKRAN.WIDTH() == 540) {
                FIX_FOR_540_WIDTH();
            }
            else if (EKRAN.WIDTH() == 720) {
                FIX_FOR_720_WIDTH();
            }
            else if (EKRAN.WIDTH() == 1080) {
                FIX_FOR_1080_WIDTH();
            }

...

 void FIX_FOR_540_WIDTH()
    {
        System.out.println("FIX FUNCTION FOR 540 low width !!!!!!!");
        SOMEELEMENT.setY( 0.865f * EKRAN.HEIGHT() );
    }

...

从以下位置复制SCREEN课程: stackoverflow answer

换句话说,如果你真的想要完全自定义订单,那么你可以使用canvas2d并创建自己的uniq UI ...