Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Программное создание экрана - Программирование Android

24.11.2013, 12:26. Просмотров 1091. Ответов 12
Метки нет (Все метки)

Всем доброго дня!
Коллеги. Так получилось что в программе приходится рисовать все экраны программно.
Столкнулся со следующей проблемой:
на эеране создаю TabkeLayout и несколько TableRow
В TableRow помещаю ImageView, но у него (ImageView) по умалчанию выставляется параметр "на всего родителя" =)
Каким образом поменять параметр у ImageView, чтобы он не занимал более того, что требует рисунок?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 12:26     Программное создание экрана
Посмотрите здесь:

Программное нажатие на области экрана - Программирование Android
Добрый день! Прошу помощи. Делаю свое приложение, есть несколько кнопок и webview с подгружаемой страницей. Надо в webview проверить...

Программное создание интерфейса - Программирование Android
Вобщем мне нужно создавать програмным способом интерфейс приложения. Обьекты будут создаватся динамически, поэтому через xml разметку не...

Программное создание TextView - Программирование Android
Всем привет! помогите пожалуйста. Как сделать по нажатию на кнопку автоматическое создание нескольких других элементов например TextView...

Программное создание layout - Программирование Android
Впервые приходится создавать экран полностью через класс. Не могу понять, как должны привязываться компоненты: снизу вверх или сверху вниз?...

Программное создание LinearLayout в RelativeLayout - Программирование Android
Фрагмент кода с ошибкой: rellayout = new RelativeLayout(this); trow.addView(rellayout); linlayin = new LinearLayout(this); ...

Программное создание layout и элементов - Программирование Android
Здравствуйте. У меня появилась необходимость создать полноценный layout без использования xml файлов. 1) Возможно ли загрузить layout со...

Программное создание GridLayout и добавление в него объектов - Программирование Android
Дисклеймер: Всем доброго дня! Я - новичок в написании программ под Android. Имеется небольшой опыт С++/С#, но речь не об этом. Я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.11.2013, 13:51     Программное создание экрана #2
Java
1
setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
24.11.2013, 13:55  [ТС]     Программное создание экрана #3
Цитата Сообщение от NiRamz Посмотреть сообщение
Java
1
setLayoutParams(new LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
WRAP_CONTENT - ругается нанего =(
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
24.11.2013, 18:03     Программное создание экрана #4
LayoutParams.WRAP_CONTENT
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
24.11.2013, 19:36  [ТС]     Программное создание экрана #5
Цитата Сообщение от V0v1k Посмотреть сообщение
LayoutParams.WRAP_CONTENT
Получается вот так
Java
1
2
3
ImageView back = new ImageView(this);
        back.setImageResource(R.drawable.back);
        back.setLayoutParams(LayoutParams.WRAP_CONTENT);
Ругается на LayoutParams, делаю import android.widget.LinearLayout.LayoutParams;
Начинает ругаться на setLayoutParams - The method setLayoutParams(ViewGroup.LayoutParams) in the type View is not applicable for the arguments (int)

Что значит - не знаю

Добавлено через 1 час 3 минуты
Цитата Сообщение от NOSC Посмотреть сообщение
Получается вот так
Java
1
2
3
ImageView back = new ImageView(this);
        back.setImageResource(R.drawable.back);
        back.setLayoutParams(LayoutParams.WRAP_CONTENT);
Ругается на LayoutParams, делаю import android.widget.LinearLayout.LayoutParams;
Начинает ругаться на setLayoutParams - The method setLayoutParams(ViewGroup.LayoutParams) in the type View is not applicable for the arguments (int)

Что значит - не знаю
Сделал вот так:
Java
1
2
3
4
5
6
7
final ImageView back = new ImageView(this);
        back.setImageResource(R.drawable.back);
        ViewGroup.LayoutParams wc = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
            );
        back.setLayoutParams(wc);
Но моя ImageView back просто исчезла с экрана и tablerow потерял "ширину"
попытался сделать:
Java
1
back.setGravity(LEFT);
Но Eclips руганулся что нельзя setGravity делать к ImageView

Что не так?
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
25.11.2013, 23:01     Программное создание экрана #6
Цитата Сообщение от NOSC Посмотреть сообщение
back.setGravity(LEFT);
Java
1
back.setGravity(LEFT);
Например
Java
1
back.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
26.11.2013, 07:53  [ТС]     Программное создание экрана #7
Цитата Сообщение от Digetix Посмотреть сообщение
Например
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
back.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Да, спасибо, кнопочка теперь сместилась туда куда нужно, но OnClickListener на ней воспринимается за ее пределами в том числе =)
Из-за чего такое может быть??

Спасибо
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
26.11.2013, 15:45     Программное создание экрана #8
Цитата Сообщение от NOSC Посмотреть сообщение
но OnClickListener на ней воспринимается за ее пределами в том числе
А картинка без пустых (прозрачных) мест?
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
26.11.2013, 20:08  [ТС]     Программное создание экрана #9
Цитата Сообщение от Digetix Посмотреть сообщение
А картинка без пустых (прозрачных) мест?
Есть прозрачные места, но картинка в них вписана и они не занимают столько места на самом деле.
Там обычная кнопка "назад" на прозрачном фоне
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
27.11.2013, 02:21     Программное создание экрана #10
onclicklistener вешается на ImageView, а не на видимую часть изображения. И если у вас будет картинка с пустыми участками (не видимыми), то на них тоже будет срабатывать событие.

Добавлено через 1 минуту
если вы тестируете на реальном аппарате, тогда посмотрите в настройки-параметры разработчика - показывать ограничения. И вам выделят цветами все отступы, границы и так далее.
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
27.11.2013, 06:52  [ТС]     Программное создание экрана #11
Цитата Сообщение от NiRamz Посмотреть сообщение
onclicklistener вешается на ImageView, а не на видимую часть изображения. И если у вас будет картинка с пустыми участками (не видимыми), то на них тоже будет срабатывать событие.

Добавлено через 1 минуту
если вы тестируете на реальном аппарате, тогда посмотрите в настройки-параметры разработчика - показывать ограничения. И вам выделят цветами все отступы, границы и так далее.
Это я прекрасно понимаю.
Грубо говоря картинка у меня 50х80 пикселей с прозрачным фоном. Я добился того, что видимая часть сместилась в нужный угол экрана, но видимо картинка расягивается на всю ширину Layout в котором она помещена и именно ее прозрачная часть (тестирую все только на реальных устройствах).
Какой параметр за это отвечает и что можно сделать??
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
27.11.2013, 11:40     Программное создание экрана #12
Цитата Сообщение от NOSC Посмотреть сообщение
но видимо картинка расягивается на всю ширину Layout в котором она помещена
Ну как это "видимо" ? Покажите весь код этого layout'а
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 11:50     Программное создание экрана
Еще ссылки по теме:

Программное создание обработчика события OnClick для button - Программирование Android
Иметься кнопка, которая создается самим пользователем Код создания кнопки: public void CreateButton() { LinearLayout...

Создание экрана программно и через xml файл - Программирование Android
Когда задаю всё программно, все элементы как надо располагаются на экране, ничего не сдвигается, всё как надо. Пытаюсь точно так же задать...

Программное масштабирование - Программирование Android
Доброе время суток. Возникла проблема с масштабированием при поддержки разных экранов разных производителей. Для масштабирования...

Программное наполнение GridLayout - Программирование Android
В цикле заполняю GridLayout картинками. По нажатию на картинку, GridLayout очищается и заполняется новым набором картинок. Очищаю...

Программное добавление View - Программирование Android
Не могу разобраться: нужно программно прилепить н-ное количество вьюх. Делаю так: Dialog dialog = new Dialog(pd.getContext()); ...


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

Или воспользуйтесь поиском по форуму:
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
27.11.2013, 11:50  [ТС]     Программное создание экрана #13
Цитата Сообщение от Digetix Посмотреть сообщение
Ну как это "видимо" ? Покажите весь код этого layout'а
Вот он:
Java
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public class WView extends Activity {
    private static final int VISIBLE = 1;
    public static String s = null;
    public static int d = R.drawable.view;
 
    public Context context;
    RelativeLayout layout;
    TableLayout toptab;
    TableRow toprow;
    TableRow row1;
    TableRow row2;
    TableRow bot;
    ScrollView scroll;
    LinearLayout sclin;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        PreferencesHelper.loadSettings(this);
 
        final Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade_in);
        layout = new RelativeLayout(this);
        layout.setBackgroundResource(d);
        toptab = new TableLayout(this);
        scroll = new ScrollView(this);
        sclin = new LinearLayout(this);
        sclin.setOrientation(LinearLayout.VERTICAL);
        toprow = new TableRow(this);
        row1 = new TableRow(this);
        row2 = new TableRow(this);
        bot = new TableRow(this);
        final ImageView back = new ImageView(this);
        back.setImageResource(R.drawable.back);
        back.setVisibility(VISIBLE);
        
        ImageView lol = new ImageView(this);
        lol.setImageResource(R.drawable.lol);
        WebView my = new WebView(this);
        my.loadUrl(s);
        my.setBackgroundColor(0x00000000);
        
        layout.addView(toptab);
        toptab.addView(toprow);
        toptab.addView(row1);
        toptab.addView(row2);
        toprow.addView(back);
        row1.addView(lol);
        row2.addView(my);
        back.setScaleType(ImageView.ScaleType.FIT_START);
        back.setOnClickListener(new OnClickListener() {          
            public void onClick(View v) {
                // TODO Auto-generated method stub
                back.startAnimation(anim);
                onBackPressed();
            }
        });
Yandex
Объявления
27.11.2013, 11:50     Программное создание экрана
Ответ Создать тему
Опции темы

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