Страница 3 из 4

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 18 июн 2013, 01:27
Foenix
ну? и что, вывелось на экран ровно то, что и заказывалось в xml-е..

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 03 июл 2013, 17:40
SPAWN
Подскажите пожалуйста! Мне нужно динамически создать 5 LinearLayout в цикле и потом к ним обращаться. Делал через setId(), но мне нужно изменять Layoutparams,а там только через имя :( :( :(

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 09 сен 2013, 10:59
nazi
как программно добавить элемент в уже существующий layout? например при нажатии кнопки. нужно что-то обновить?
у меня ничего не получается.

TableLayout body1 = (TableLayout) findViewById(R.id.BodyTable1);

TableRow myrow1 = new TableRow(this);

LayoutParams rowParam1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

myrow1.setLayoutParams(rowParam1);
int RGB1 = android.graphics.Color.rgb(223, 223, 223);
myrow1.setBackgroundColor(RGB1);

LinearLayout.LayoutParams weightParams1 = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
weightParams1.weight = 1;

//LayoutParams lpView1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

TextView tv11 = new TextView (this, null, R.style.BodyText);
tv11.setText("2,1");
tv11.setLayoutParams( weightParams1 );
tv11.setHeight(1);
myrow1.addView(tv11);
body1.addView(myrow1);

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 29 сен 2013, 23:38
trew
NAZI
Напишите часть кода, если он выполниться успешно тогда и остальные команды добавите.

Код: Выделить всё

TextView tv11 = new TextView(this); 
tv11.setText("Это новая запись.");
		
TableRow tableRow3 =(TableRow)findViewById(R.id.tableRow3);		
int RGB1 = android.graphics.Color.rgb(223, 223, 223);
tableRow3.setBackgroundColor(RGB1);
tableRow3.addView(tv11)
;
Данный код добавляет элемент TextView в TableRow (это строка в TableLayout).

Причем все остальные элементы созданы в main.xml т.е. не программным способом а через XML.

Код: Выделить всё

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 02 дек 2013, 02:18
Phashik
Обратите внимание, что для двух объектов View я использовал один объект LayoutParams - lpView. И если я теперь буду менять свойства
этого объекта, меняться будут оба View.
Есть основания полагать, что это неправда.
Думаю, что LayoutParams передаются по значению, а не по ссылке. Поэтому ничего не будет меняться.
Вот код и результат:

Код: Выделить всё

Button btn = new Button (this);
btn.setText("Button1");
linLayout.addView(btn, lpView);
		
lpView.width = LayoutParams.MATCH_PARENT;
		
Button btn2 = new Button (this);
btn2.setText("Button2");
btn2.setLayoutParams(lpView);
linLayout.addView(btn2);
		
lpView.width = 200;
		
Button btn3 = new Button (this);
btn3.setText("Button3");
linLayout.addView(btn3, lpView);

btn.requestLayout();
btn2.requestLayout();
btn3.requestLayout();

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 03 дек 2013, 15:22
damager82
Phashik писал(а):
Обратите внимание, что для двух объектов View я использовал один объект LayoutParams - lpView. И если я теперь буду менять свойства
этого объекта, меняться будут оба View.
Есть основания полагать, что это неправда.
Да, некорректно у меня написано. Спасибо!

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 31 май 2014, 14:18
Atetc
rezak90 писал(а):button1.setId(12345);
в onClicke:
case 12345: и т.д.
Господа!
Подскажите, не является ли данный вариант задания id для View чреватым в будущем неизвестными последствиями?
Нужно ли стараться делать уникальные числа как делают с магнитными картами 324246000001, 324246000002, 324246000003 ... ?
Существуют какие-то принятые нормы для программного задания id ?

R.java

Код: Выделить всё

public static final class id {
        public static final int action_bar=0x7f07001c;
        public static final int action_bar_activity_content=0x7f070014;
        public static final int action_bar_container=0x7f07001b;........
Я так понимаю в R.java мы уже никак id свежеиспеченного view-компонента не впихнем... но возможно есть рекомендации девелоп-сообщества ?

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 23 июн 2014, 23:33
ZumbiAzul
Известно, что вышло обновление Eclipse ADT от Google, в котором помимо всего прочего появился файл layout/fragment_main.xml, а также в исходнике MainActivity.java появился подкласс PlaceholderFragment... Так вот, в связи с этим, не совсем понятно, как применить знания текущего урока к новой структуре.. В качестве ответа, я бы хотел получить исходный код MainActicity.java, пригодный для последнего обновления Eclipse ADT.

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 24 июн 2014, 05:32
Viewer
ZumbiAzul

Если пока не понимаете что это такое и с чем это едят, после создания проекта удалите (или закомментируйте) в onCreate следующие строки:
[syntax=java] if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}[/syntax]

На все остальное (класс PlaceholderFragment, fragment_main.xml) можете не обращать никакого внимания, либо удалить, если оно вам мозолит глаза.
Когда в процессе обучения дойдете до фрагментов, тогда поймете что к чему.

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 18 окт 2014, 11:06
pal2
Проект создаю по уроку, но при добавлении

Код: Выделить всё

LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
вот такая ошибка:

Код: Выделить всё

eclipse Description Resource Path Location Type Call requires API level 11 (current min is 10): new android.app.ActionBar.LayoutParams MainActivity.java /P0161_DynamicLayout/src/com/example/dynamiclayout line 18 Android Lint Problem
мне нужно изменить нижний API? Но если Target стоит 2.3.3, то больше не поставить.
Спасибо!

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 18 окт 2014, 12:12
Foenix
target - это не нижний, а целевой

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 18 окт 2014, 21:20
pal2
Да да, все правильно! Не знал как написать точнее.
Но если в уроке написано 2.3.3 (API10),то должно работать? Но у меня не работает с такой ошибкой, как указано выше.
Подскажите пожалуйста....
Спасибо

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 19 окт 2014, 13:47
doter.ua
pal2 писал(а):Да да, все правильно! Не знал как написать точнее.
Но если в уроке написано 2.3.3 (API10),то должно работать? Но у меня не работает с такой ошибкой, как указано выше.
Подскажите пожалуйста....
Спасибо
new android.app.ActionBar.LayoutParams MainActivity.java Попробуй заменить ActionBar.LayoutParams на что-нибудь другое, например, LinearLayout.LayoutParams

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 12 дек 2014, 22:59
mcdy
Здравствуйте. Для закрепления урока решил сделать некий тест:
стартовая страница - картинка, под ней вопрос, еще снизу 4 кнопки с вариантами ответов.
при нажатии на кнопку весь экран должен перерисоваться для нового вопроса.

Вобщем, первая перерисовка удалась, но метод onCreate всего один, и повторное применение слушателей для новых кнопок ввел оменя в ступор. Можно это как-то сделать вообще?

зы: так же новая картинка почему-то на весь экран по ширине и не меняет никак размер, даже при присвоении ей размеров или констант lp1, lp2... можно это исправить?
зы2: часто текст из текствоого поля так же почему-то идет ниже кнопок (кнопки его перекрывают), хотя даже места под кнопками свободного - полно... в чем может быть проблема?

Код: Выделить всё

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends ActionBarActivity implements OnClickListener{
	
	
	 Button button1;
	 Button button2;
	 Button button3;
	 Button button4;
	 TextView editText1;
	 ImageView imageView1;
	 int bal=0;
	 LinearLayout ll1;
	 
	 int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);
        button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(this);
        button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(this);
        button4 = (Button) findViewById(R.id.button4);
        button4.setOnClickListener(this);
        editText1 = (TextView) findViewById(R.id.editText1);
        imageView1 = (ImageView) findViewById(R.id.imageView1);
        ll1 = (LinearLayout) findViewById(R.id.ll1);
        
        
    }

    
    @Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
    	
    	switch (v.getId()) {
        case R.id.button1:
        	ll1.removeAllViews();
        break;
        case R.id.button2:
        	ll1.removeAllViews();
          break;
        case R.id.button3:
        	ll1.removeAllViews();
        	bal=bal+1;
          break;
        case R.id.button4:
        	ll1.removeAllViews();
          break;
        }

    	LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    	
    	
    	ll1.setOrientation(LinearLayout.VERTICAL);
    	ImageView imageView1 = new ImageView(this);	
    	imageView1.setImageResource(R.drawable.kv02);
    	imageView1.setMaxHeight(220);
    	imageView1.setMaxWidth(240);
        ll1.addView(imageView1);
        TextView textView1 = new TextView(this);
        textView1.setHeight(26);
    	textView1.setText("ххххх?");
        ll1.addView(textView1, lp2);

        LinearLayout ll2 = new LinearLayout(this);
    	Button button1 = new Button(this);
    	button1.setText("1");
        ll2.addView(button1);
    	Button button2 = new Button(this);
    	button2.setText("2");
        ll2.addView(button2);
        
        LinearLayout ll3 = new LinearLayout(this);
    	Button button3 = new Button(this);
    	button3.setText("3");
        ll3.addView(button3);
    	Button button4 = new Button(this);
    	button4.setText("4");
        ll3.addView(button4);
        
        ll1.addView(ll2, lp2);
        ll1.addView(ll3, lp2);
        
   
        
        
	}
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }



}

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 13:43
doter.ua
А почему просто не менять текст\картинку по событию ( например по клику ). Можно делать кнопки невидимыми (invisible или gone) если нужно изменить кол-во вариантов. В случае совсем радикальных отличий между вопросами можно использовать фрагменты. У картинок есть режимы заполнения типа растянуть, замостить и т.д. погуглите.

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 15:02
mcdy
может потому что все звучит непонятно...
проблема у меня с пониманием в том, что метод onClick всего один... и вот как в него вписать все варианты нажатий одной и той же кнопки, но при разных вопросах... что бы кнопка каждый раз выводила новый экран...
есть идея сделать через цикл, задав всем текстовым значениям и картинкам константы с номерами экрана, но опять же, застрял на том как вызывать определенную константу с нужным индексом. Хз как оно в методе onClick будет себя вести, правда...
еще была идея делать для каждого нового вопроса новый main-клас, но по сути будет создаваться новая програма, и это слишком мудрено получится, кажется...

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 16:51
Foenix
какой еще цикл? там же SWITCH Организовывается! в уроках же есть это.

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 16:56
mcdy
Foenix писал(а):какой еще цикл? там же SWITCH Организовывается! в уроках же есть это.
эм... тут switch же используется для выбора действия в зависимости от того, какой элемент нажали

у меня же - кнопка сохраняется, и после каждого последующего нажатия по ней - должна делать другое действие

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 18:25
Foenix
что значит "новый экран"? наверняка просто вьюшка, демонстрирующая вопрос. Зачем новый экран, если можно просто поменять содержимое соответствующей вьюшки на другое?
Используй скрины, чтоб показать что тебе действительно нужно.

Re: Урок 16. Программное создание экрана. LayoutParams

Добавлено: 13 дек 2014, 19:12
mcdy
viewtopic.php?f=3&t=108&p=38204#p38187
вот тут я описал что хотелось бы сделать...
Foenix писал(а):что значит "новый экран"? наверняка просто вьюшка, демонстрирующая вопрос. Зачем новый экран, если можно просто поменять содержимое соответствующей вьюшки на другое?
Используй скрины, чтоб показать что тебе действительно нужно.
Да, можно просто поменять картинку в ImageView, текст на кнопках-ответах и в самом вопросе.
НО, это получается сделать только 1 раз. код того что пробовал сделать по ссылке выше (экран, который делается после SWITCH аналогичен тому, что описан в main.xml)

изменения экрана прописал в методе onClick (изменнение самих значений может даже и лучше будет), но вот после этого как присвоить новые слушатели кнопкам и что бы элементам присваивались уже третие-...-двадцатые значения?