Урок 16. Программное создание экрана. LayoutParams
Re: Урок 16. Программное создание экрана. LayoutParams
ну? и что, вывелось на экран ровно то, что и заказывалось в xml-е..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 16. Программное создание экрана. LayoutParams
Подскажите пожалуйста! Мне нужно динамически создать 5 LinearLayout в цикле и потом к ним обращаться. Делал через setId(), но мне нужно изменять Layoutparams,а там только через имя
Re: Урок 16. Программное создание экрана. LayoutParams
как программно добавить элемент в уже существующий 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);
у меня ничего не получается.
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
Напишите часть кода, если он выполниться успешно тогда и остальные команды добавите.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);
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 16. Программное создание экрана. LayoutParams
Есть основания полагать, что это неправда.Обратите внимание, что для двух объектов 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();
- Вложения
-
- sa0161.jpg (22.99 КБ) 16141 просмотр
open your eyes
Re: Урок 16. Программное создание экрана. LayoutParams
Да, некорректно у меня написано. Спасибо!Phashik писал(а):Есть основания полагать, что это неправда.Обратите внимание, что для двух объектов View я использовал один объект LayoutParams - lpView. И если я теперь буду менять свойства
этого объекта, меняться будут оба View.
Re: Урок 16. Программное создание экрана. LayoutParams
Господа!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;........
Русскоязычный чат Android разработчиков https://gitter.im/rus-speaking/android
Re: Урок 16. Программное создание экрана. LayoutParams
Известно, что вышло обновление Eclipse ADT от Google, в котором помимо всего прочего появился файл layout/fragment_main.xml, а также в исходнике MainActivity.java появился подкласс PlaceholderFragment... Так вот, в связи с этим, не совсем понятно, как применить знания текущего урока к новой структуре.. В качестве ответа, я бы хотел получить исходный код MainActicity.java, пригодный для последнего обновления Eclipse ADT.
Re: Урок 16. Программное создание экрана. LayoutParams
ZumbiAzul
Если пока не понимаете что это такое и с чем это едят, после создания проекта удалите (или закомментируйте) в onCreate следующие строки:
[syntax=java] if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}[/syntax]
На все остальное (класс PlaceholderFragment, fragment_main.xml) можете не обращать никакого внимания, либо удалить, если оно вам мозолит глаза.
Когда в процессе обучения дойдете до фрагментов, тогда поймете что к чему.
Если пока не понимаете что это такое и с чем это едят, после создания проекта удалите (или закомментируйте) в onCreate следующие строки:
[syntax=java] if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}[/syntax]
На все остальное (класс PlaceholderFragment, fragment_main.xml) можете не обращать никакого внимания, либо удалить, если оно вам мозолит глаза.
Когда в процессе обучения дойдете до фрагментов, тогда поймете что к чему.
Re: Урок 16. Программное создание экрана. LayoutParams
Проект создаю по уроку, но при добавлении
вот такая ошибка:
мне нужно изменить нижний API? Но если Target стоит 2.3.3, то больше не поставить.
Спасибо!
Код: Выделить всё
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
Спасибо!
Re: Урок 16. Программное создание экрана. LayoutParams
target - это не нижний, а целевой
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 16. Программное создание экрана. LayoutParams
Да да, все правильно! Не знал как написать точнее.
Но если в уроке написано 2.3.3 (API10),то должно работать? Но у меня не работает с такой ошибкой, как указано выше.
Подскажите пожалуйста....
Спасибо
Но если в уроке написано 2.3.3 (API10),то должно работать? Но у меня не работает с такой ошибкой, как указано выше.
Подскажите пожалуйста....
Спасибо
Re: Урок 16. Программное создание экрана. LayoutParams
new android.app.ActionBar.LayoutParams MainActivity.java Попробуй заменить ActionBar.LayoutParams на что-нибудь другое, например, LinearLayout.LayoutParamspal2 писал(а):Да да, все правильно! Не знал как написать точнее.
Но если в уроке написано 2.3.3 (API10),то должно работать? Но у меня не работает с такой ошибкой, как указано выше.
Подскажите пожалуйста....
Спасибо
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 16. Программное создание экрана. LayoutParams
Здравствуйте. Для закрепления урока решил сделать некий тест:
стартовая страница - картинка, под ней вопрос, еще снизу 4 кнопки с вариантами ответов.
при нажатии на кнопку весь экран должен перерисоваться для нового вопроса.
Вобщем, первая перерисовка удалась, но метод onCreate всего один, и повторное применение слушателей для новых кнопок ввел оменя в ступор. Можно это как-то сделать вообще?
зы: так же новая картинка почему-то на весь экран по ширине и не меняет никак размер, даже при присвоении ей размеров или констант lp1, lp2... можно это исправить?
зы2: часто текст из текствоого поля так же почему-то идет ниже кнопок (кнопки его перекрывают), хотя даже места под кнопками свободного - полно... в чем может быть проблема?
стартовая страница - картинка, под ней вопрос, еще снизу 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
А почему просто не менять текст\картинку по событию ( например по клику ). Можно делать кнопки невидимыми (invisible или gone) если нужно изменить кол-во вариантов. В случае совсем радикальных отличий между вопросами можно использовать фрагменты. У картинок есть режимы заполнения типа растянуть, замостить и т.д. погуглите.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 16. Программное создание экрана. LayoutParams
может потому что все звучит непонятно...
проблема у меня с пониманием в том, что метод onClick всего один... и вот как в него вписать все варианты нажатий одной и той же кнопки, но при разных вопросах... что бы кнопка каждый раз выводила новый экран...
есть идея сделать через цикл, задав всем текстовым значениям и картинкам константы с номерами экрана, но опять же, застрял на том как вызывать определенную константу с нужным индексом. Хз как оно в методе onClick будет себя вести, правда...
еще была идея делать для каждого нового вопроса новый main-клас, но по сути будет создаваться новая програма, и это слишком мудрено получится, кажется...
проблема у меня с пониманием в том, что метод onClick всего один... и вот как в него вписать все варианты нажатий одной и той же кнопки, но при разных вопросах... что бы кнопка каждый раз выводила новый экран...
есть идея сделать через цикл, задав всем текстовым значениям и картинкам константы с номерами экрана, но опять же, застрял на том как вызывать определенную константу с нужным индексом. Хз как оно в методе onClick будет себя вести, правда...
еще была идея делать для каждого нового вопроса новый main-клас, но по сути будет создаваться новая програма, и это слишком мудрено получится, кажется...
Re: Урок 16. Программное создание экрана. LayoutParams
какой еще цикл? там же SWITCH Организовывается! в уроках же есть это.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 16. Программное создание экрана. LayoutParams
эм... тут switch же используется для выбора действия в зависимости от того, какой элемент нажалиFoenix писал(а):какой еще цикл? там же SWITCH Организовывается! в уроках же есть это.
у меня же - кнопка сохраняется, и после каждого последующего нажатия по ней - должна делать другое действие
Re: Урок 16. Программное создание экрана. LayoutParams
что значит "новый экран"? наверняка просто вьюшка, демонстрирующая вопрос. Зачем новый экран, если можно просто поменять содержимое соответствующей вьюшки на другое?
Используй скрины, чтоб показать что тебе действительно нужно.
Используй скрины, чтоб показать что тебе действительно нужно.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 16. Программное создание экрана. LayoutParams
viewtopic.php?f=3&t=108&p=38204#p38187
вот тут я описал что хотелось бы сделать...
НО, это получается сделать только 1 раз. код того что пробовал сделать по ссылке выше (экран, который делается после SWITCH аналогичен тому, что описан в main.xml)
изменения экрана прописал в методе onClick (изменнение самих значений может даже и лучше будет), но вот после этого как присвоить новые слушатели кнопкам и что бы элементам присваивались уже третие-...-двадцатые значения?
вот тут я описал что хотелось бы сделать...
Да, можно просто поменять картинку в ImageView, текст на кнопках-ответах и в самом вопросе.Foenix писал(а):что значит "новый экран"? наверняка просто вьюшка, демонстрирующая вопрос. Зачем новый экран, если можно просто поменять содержимое соответствующей вьюшки на другое?
Используй скрины, чтоб показать что тебе действительно нужно.
НО, это получается сделать только 1 раз. код того что пробовал сделать по ссылке выше (экран, который делается после SWITCH аналогичен тому, что описан в main.xml)
изменения экрана прописал в методе onClick (изменнение самих значений может даже и лучше будет), но вот после этого как присвоить новые слушатели кнопкам и что бы элементам присваивались уже третие-...-двадцатые значения?