С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Тамика
Котовчанин
917 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,229
Записей в блоге: 27
#1

Некорретное отображение Лейаутов - Программирование Android

19.03.2015, 14:55. Просмотров 335. Ответов 8
Метки нет (Все метки)

Всем привет!
Помогите, пожалуйста, решить проблему с лейаутами.
Такой вот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class SampleActivity extends Activity {
 
    private FrameLayout controlView;
    private LinearLayout mViewPanel;
    private View scene;
 
    private void initViewPanel()
    {
        mViewPanel = new LinearLayout(this);
        mViewPanel.setOrientation(LinearLayout.HORIZONTAL);
        mViewPanel.setBackgroundColor(Color.RED);
    }
 
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        initViewPanel();
 
        controlView = new FrameLayout(this);
        controlView.setBackgroundColor(Color.BLUE);
 
        scene = new View(this);
        scene.setBackgroundColor(Color.GREEN);
 
        mViewPanel.addView(scene, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1));
        mViewPanel.addView(controlView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 2));
        setContentView(mViewPanel);
    }
}
Получается такая бяка.
Некорретное отображение Лейаутов
Наверное, я что-то не так поняла, но как работает weight? Почему для scene больше места? При том, если поменять строки местами, но НЕ МЕНЯТЬ вес, то синий лейаут будет больше...
Расскажите нубу, если не сложно, как оперировать весом... Я думала, что простыми соотношениями флоатов. Но, видимо, не так...
Заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2015, 14:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорретное отображение Лейаутов (Программирование Android):

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...

Некорретное соединение по протоколу Direct Play - СетиНекорретное соединение по протоколу Direct Play - Сети
Пытаюсь установить соединения по протоколу DirectPlay через hamachi. Необходимые порты открыты. Смотерли WireShark-ом. 25.151.224.190...

WAMPSERVER Version 2.4 - отображение в БД в Хроме (пишет ошибки, в уроках Баранцева отображение БД как обычная страница) - Web-серверы
Здравствуйте. Решил изучить селениум (скачал уроки М. Баранцева). Поставил WAMPSERVER Version 2.4 (всё по умолчанию). При установке БД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
19.03.2015, 15:23 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Тамика Посмотреть сообщение
При том, если поменять строки местами, но НЕ МЕНЯТЬ вес, то синий лейаут будет больше...
не должен!

weight1 + weight2 = 100% (общий вес ТРИ)
то есть два лаяута займут 100% экрана, но поделят эти % обратно пропорционально весу
лаяут с весом ДВА попытается занять места в два раза меньше чем тот, с весом 1

вес 1 как бы говорит - я хочу ВСЕ 100%
а второй с весом 2 говорит, а мне достаточно 1/2 экрана

но ведь их двое и поэтому 1+2=3
100 - 100 * 1/3 = 66%
100 - 100 * 2/3 = 33%
типа того
1
Тамика
Котовчанин
917 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,229
Записей в блоге: 27
19.03.2015, 15:41  [ТС] #3
Паблито, вот я так и думала, но меня сбило с толку то, что если вернуть эти две строчки в те, которые я изначально написала --
C++
1
2
        mViewPanel.addView(controlView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 0.75f));
        mViewPanel.addView(scene, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 0.25f));
, то контролВью очень маленькая, будто у неё вес 0.25. А сцена - растянута на остальное пространство...
Почему так?
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
19.03.2015, 15:52 #4
так все правильно, написать 0,75 и 0,25 это тоже самое что написать 3 и 1
первому достанется 1/4 часть экрана, а второму 3/4 части экрана
да уже, я не силен в объяснениях

какие бы цифры не писались в веса - сумма этих весов будет означать 100% покрытия экрана
а дальше надо разбрасывать свободное пространство обратно пропорционально весам, то есть 1/вес
1
Тамика
Котовчанин
917 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,229
Записей в блоге: 27
19.03.2015, 16:04  [ТС] #5
Паблито, ааа... То есть, если обратно пропорционально, то всё будет наоборот?
Хах. Тогда понятно. Спасибо Вам огромное.
0
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
19.03.2015, 16:19 #6
у меня нет математического образования и я не уверен, что к месту использовал термин "обратно пропорционально"
могу разве что привести несколько примеров
дано 2 лаяута с весами w1 и w2 и будем считать что экран это 100%
тогда при весах
w1 = 1
w2 = 5
первый лаяут будет занимать очень много места на экране, а точнее 100 - 1/6 = 84%
второй 100 - 5/6 = 17%
другими словами: первый будет занимать в ПЯТЬ раз больше места чем второй, при этом они вместе займут 100% экрана

84/17 = 5 (ну примерно, я округляю для простоты)
--------------------------------------------------------------------

w1 = 3
w2 = 5
первый лаяут будет занимать 100 - 3/8 = 62.5%
второй 100 - 5/8 = 37.5%

3/5 = 37.5/62.5
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
19.03.2015, 22:53 #7
Паблито, не совсем верно. Чтобы работало так как должно исходя из логики, нужно всего лишь установить размер 0dp вместо match_parent. С match_parent weight ведет себя не как ожидаешь.
1
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,068
Завершенные тесты: 1
19.03.2015, 23:29 #8
ха, точно
получается при match_parent вес становится как бы наоборот
а я так уже привык выставлять веса что даже и не думал 0dp ставить
оно работает и так и так, просто для обычного человека конечно логичнее 0dp и веса тогда не обратно пропорциональны!
это ценная информация
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
20.03.2015, 08:56 #9
Еще в родителе не забывайте есть параметр сумма веса.
0
20.03.2015, 08:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.