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

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

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

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

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

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

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

Программное создание интерфейса Android
Android Программное создание обработчика события OnClick для button
Программное нажатие на области экрана Android
Android Программное создание layout
Программное создание LinearLayout в RelativeLayout Android
Android Программное создание GridLayout и добавление в него объектов
Создание экрана программно и через xml файл 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
Сообщений: 647
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
Сообщений: 647
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
Сообщений: 647
27.11.2013, 11:40     Программное создание экрана #12
Цитата Сообщение от NOSC Посмотреть сообщение
но видимо картинка расягивается на всю ширину Layout в котором она помещена
Ну как это "видимо" ? Покажите весь код этого layout'а
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2013, 11:50     Программное создание экрана
Еще ссылки по теме:

Android Программное масштабирование
Android Программное создание layout и элементов
Android Программное создание TextView
Программное добавление элементов Android
Android Программное добавление View

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

Или воспользуйтесь поиском по форуму:
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