Учебник по созданию пользовательских макетов для Android?

Я в своем уме пытаюсь понять это и надеюсь, что есть кто-то, у кого есть решение.

Я хочу создать собственный макет для приложения Android. Теоретически это должно быть достаточно прямолинейно, но я не могу найти полезную информацию о том, как это сделать.

Я ищу: 1) Простое пошаговое руководство о том, как создать подкласс ViewGroup для создания пользовательских макетов. 2) Базовое понимание внутренней механики, например, как получить доступ к дочерним представлениям, как и когда попросить дочерние представления рисовать себя, как определить xml для пользовательского макета, как получить доступ к пользовательским атрибутам xml и т. д.

Я просмотрел весь Интернет, и я могу найти только небольшие лакомые кусочки, и даже не смог приступить к созданию подкласса.

Я нашел 1) выступление на http://parleys.com/#id=2191&sl=3&st=5, но он обрывается через несколько минут после запроса подписки. 2) Справочник по API по адресу http://developer.android.com/reference/android/view/ViewGroup.html, но это не дает никакого представления о том, как реально реализовать подкласс.


person Paul Blaine    schedule 17.06.2011    source источник
comment
Если вы согласитесь на книги, я знаю, что описал это в Руководстве занятого кодера по продвинутой разработке для Android, и я думаю, что это также описано в других книгах.   -  person CommonsWare    schedule 17.06.2011
comment
ок, спасибо обязательно посмотрю.   -  person Paul Blaine    schedule 18.06.2011


Ответы (1)


Я нашел это . Ничего сложного.

Учебник

В поддержке Android больше нет абсолютного макета. Я просто хочу использовать метод setX. FrameLayout - лучший вариант. Посмотрите также: ответ stackoverflow

FrameLayout позволяет вам устанавливать положение и размеры, аналогичные абсолютным. Если вы хотите углубиться, вам нужно будет использовать следующие методы:

// Для x и y вы можете использовать onCreate

// Лучший способ настроить ширину и высоту — использовать post // метод post означает, что пользовательский интерфейс готов

  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 из: Установить позицию в процентах - Android DisplayMetrics

Другими словами, если вы действительно хотите полностью настроить заказ, вы можете использовать canvas2d и создать собственный уникальный пользовательский интерфейс...

person Nikola Lukic    schedule 19.10.2016