【问题标题】:Tutorial on creating custom layouts for Android?为 Android 创建自定义布局的教程?
【发布时间】:2011-06-17 14:56:47
【问题描述】:

我正在努力解决这个问题,希望有人有解决方案。

我想为 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 参考,但这并没有提供任何关于如何实际实现子类的线索。

【问题讨论】:

  • 如果您愿意阅读书籍,我知道我在 The Busy Coder's Guide to Advanced Android Development 中对此进行了介绍,我认为其他书籍也对此进行了介绍。
  • 好的,谢谢,我一定会看看的。

标签: android layout viewgroup


【解决方案1】:

我找到了这个。这很复杂。

Tutorial

android 支持中没有更多的绝对布局。 我只想 setX 方法。 FrameLayout 是最好的选择。 还看: stackoverflow answer

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

// 对于 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 类: Set position by percent - Android DisplayMetrics

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2018-01-23
    • 2012-10-28
    • 2011-09-05
    相关资源
    最近更新 更多