Button layout_alignParentRight does not work on the first loop? - java

I add dynamically viewflipper and on each view I add multiple views one of which is a RelativeLayer containg two buttons - one to go on the left on to the right of the layer.
it works for all loops , but not for the first, where both buttons stay one atop another on the left.
Anyone with helpful advice appreciated.
LayoutInflater inflater = LayoutInflater.from(this);
ViewGroup parent = (ViewGroup) findViewById(R.id.slider_holder);
for (int i = 0; i < temp.length; i++) {
ViewGroup np = (ViewGroup) findViewById(R.id.nexpre);
LinearLayout l=(LinearLayout) inflater.inflate(R.layout.flipper_slides, parent, false);
RelativeLayout next_prev =(RelativeLayout) inflater.inflate(R.layout.next_prev, l, false);
for (int k = 0; k< temp1.length; k++) {
ViewGroup nested_parent = (ViewGroup) findViewById(R.id.nested_slider_holder);
LinearLayout nl=(LinearLayout) inflater.inflate(R.layout.nested_flipper_slides, nested_parent, false);
TextView temp_tv1 =(TextView) inflater.inflate(R.layout.nested_flipper_tv, nl, false);
temp_tv1.setText(temp[i]+" "+temp1[k]);
nl.addView(temp_tv1);
ff.addView(nl);
}
next_prev.addView(nested_prev);
next_prev.addView(nested_next);
l.addView(ff);
l.addView(next_prev);
f.addView(l);
}
This is the next_prev.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/nexpre"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_marginTop="-50dip" >
</RelativeLayout>
Here is the nested_prev.xml
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="Prev" >
</Button>
And this is the nested_next.xml
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="Next" >
</Button>

The issue was that on the first loop the button that was supposed to go all the way to the right, did not. For all other loops after the first it works but not for the first.
I added this line to the code:
if(i==0){
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
next_prev.getChildAt(1).setLayoutParams(params);
}
for the first loop I do "ALIGN PARENT RIGHT" programmatically with layout params.
Anyway if anyone could explain the reason why the first loop behaves differently by the others I would appreciate.

Related

How to set text in textview from array

I am trying to get the values I have in an array to a text view, I am using a ViewFlipper and I would like to change the textview at the same time the image changes.
for (int i = 0; i < imagens.length && i < categories.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(imagens[i]);
simpleViewFlipper.addView(imageView);
info_text3.setText(Arrays.toString(categories));
}
Animation in = AnimationUtils.loadAnimation(this, android.R.anim.slide_in_left);
Animation out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);
simpleViewFlipper.setInAnimation(in);
simpleViewFlipper.setOutAnimation(out);
simpleViewFlipper.setFlipInterval(5000);
simpleViewFlipper.setAutoStart(true);
The image part is working and setting the text to the textview is also working, the problem is that the textview is static and that the text in the text view is the entire array and I just want one value, I was thinking linking the array with the 'i' from the for sentence, how can I do this?
Try below,
info_text3.setText(categories[i]);
You can directly access arrays values at any index
info_text3.setText(categories[i]);
1. Create a layout with an image and a text view as mentioned below:
custom_view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="#+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="#dimen/element_spacing"
android:text="Text" />
<ImageView
android:id="#+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="#drawable/yourimage" />
</LinearLayout>
2. Inflate that layout
View customView = activity.getLayoutInflater().inflate(R.layout.custom_view, null);
3. Add custom view to viewflipper.
simpleViewFlipper.addView(customView);
FINAL CODE
for (int i = 0; i < imagens.length && i < categories.length; i++) {
View customView = context.getLayoutInflater().inflate(R.layout.custom_view, null);
TextView info_text3 = customView.findViewById(R.id.text);
ImageView imageView = customView.findViewById(R.id.image);
imageView.setImageResource(imagens[i]);
simpleViewFlipper.addView(customView);
info_text3.setText(categories[i]);
}

Scroll on duplicated Layout - Android

Here I am using this code to paste my main_activity.xml on top of itself 5 times, making a long list of itself
Here is my code:
for(int i = 0; i < 5; i++){
LayoutInflater loiViewInflater = (LayoutInflater)
getSystemService (Context.LAYOUT_INFLATER_SERVICE);
View mView = loiViewInflater.inflate(R.layout.activity_main,
null);
FrameLayout.LayoutParams params = new
FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMargins(0,i * 400,0,0);
addContentView(mView, params);
}
Everything works handy dandy, but how can I make it to where I can scroll down?
The activities go off the screen and I can't think of a way to scroll down. Is it possible?
Thanks, Cooper
You can always use a ScrollView, just set some container, like a linear layout, and copy your layout inside.
The hierarchy should look like:
ScrollView
LinearLayout
YourCopy
YourCopy
YourCopy
For instance, for your container view:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="#+id/list_container"
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content">
</LinearLayout>
</ScrollView>
And on your loop (once you set your layout above with setContentView) something like:
LinearLayout container = (LinearLayout)findById(R.id.list_container)
for(int i = 0; i < 5; i++){
// inflate and set up your layout mView
// (...)
container.addView(mView);
}
Basically, you are injecting your copies inside the LinearLayout (which is inside the ScrollView).
As Logain suggested, you can use a ScrollView and copy your layouts inside.Here is a sample.
<ScrollView
android:id="#+id/start_root"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="#+id/fragment_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/page_title_text"
android:textSize="32sp"
android:paddingBottom="5dp"
android:layout_centerHorizontal="true" />
<TextView
android:id="#+id/fragment_intro"
style="#style/wizard_intro_style"
android:layout_below="#+id/fragment_title" />
</RelativeLayout>
</ScrollView>

Trying to add multiple views but get a blank screen

I created a custom xml file with a LinearLayout and TextView. I have a for loop that i want go through an ArrayList and add the view to a ScrollView for each object. Below is the code i tried to achieve this, but it just gives me a blank screen. I tried to see if the ArrayList was empty, but that's not it. I didn't really know what i was doing when i tried this. I just wanted to see if it worked, but it didn't so what's the problem?
for(int x = 0; x < runs.size(); x++){
inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.run_layout, (ViewGroup) getCurrentFocus());
TextView name = (TextView) layout.findViewById(R.id.tvRunName);
name.setText(runs.get(x).getName());
llRuns.addView(layout);
}
Heres the run_layout xml....
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#drawable/run_background" >
<TextView
android:id="#+id/tvRunName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#android:color/white"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_gravity="center"
android:layout_marginTop="10dp" />
Here's the Activities xml....
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".YourRuns"
android:background="#181818"
android:id="#+id/llYourRunsLayout">
<ScrollView
android:id="#+id/svRuns"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="#+id/llRuns"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
Change (ViewGroup) getCurrentFocus() to null, becouse inflater.inflate() second parameter is parent of view, and when you start your activity for default no elements with focus. And you indicate two parents for view first on inflate, second when you say to add layout into llRuns.
for(int x = 0; x < runs.size(); x++){
inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.run_layout, (ViewGroup) getCurrentFocus());
TextView name = (TextView) layout.findViewById(R.id.tvRunName);
name.setText(runs.get(x).getName());
llRuns.addView(layout);
}

Aligning A Relative Layout Progmatically in Another Activity

Ok, I am completely stuck on this. I have looked everywhere for an answer but no solutions I found did me any good. What I am trying to do is add a relative layout to a linear layout and I can do that just fine, the problem is that I can only set the height and the width of the relative layout, and can't align it below any views in the linear layout. I'm guessing this is because the relative layout isn't a child of the linear layout? Only reason I am taking the above approach is because I need to add a relative layout for every record I have in a database table. Anyway here is the code below any help would be great :)
individual_past_test.xml file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/past_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#E4EFF5" >
<TextView
android:id="#+id/candidate_name"
style="#style/past_test_candidate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="25dp" />
</RelativeLayout>
IndividualPastTest.java
public class IndividualPastTests extends RelativeLayout {
private Context mContext;
public IndividualPastTests(Context context) {
super(context);
mContext = context;
String infService = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li;
li = (LayoutInflater) getContext().getSystemService(infService);
li.inflate(R.layout.individual_past_test, this, true);
}
}
PastTests.java (relevant parts)
past_tests_label = (TextView) findViewById(R.id.past_tests_label);
past_tests_label.setId(1);
addViewForFirstTest();
private void addViewForFirstTest() {
past_test = new IndividualPastTests(this);
RelativeLayout.LayoutParams past_test_view_params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
past_test.setGravity(Gravity.CENTER_HORIZONTAL);
// Not being called?
past_test_view_params.addRule(RelativeLayout.BELOW, past_tests_label.getId());
past_test_view_params.height = 100;
past_test_view_params.width = 600;
System.out.println(past_tests_label.getId());
past_test.setLayoutParams(past_test_view_params);
this.addContentView(past_test, past_test_view_params);
}
Ok I ended up fixing it by adding a relative layout to my xml file for past tests(which I didnt add to the question), then changed my PastTests.java as follows -
// Added this line to get the RelativeLayout I created in the xml to hold my view
pasts_tests_holder = (RelativeLayout) findViewById(R.id.past_tests_holder)
past_tests_label = (TextView) findViewById(R.id.past_tests_label);
past_tests_label.setId(1);
addViewForFirstTest();
private void addViewForFirstTest() {
past_test = new IndividualPastTests(this);
RelativeLayout.LayoutParams past_test_view_params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
past_test.setGravity(Gravity.CENTER_HORIZONTAL);
past_test_view_params.addRule(RelativeLayout.BELOW, past_tests_label.getId());
past_test_view_params.height = 100;
past_test_view_params.width = 600;
past_test.setLayoutParams(past_test_view_params);
// Changed this line to add the past_test view to my new relative layout
past_tests_holder.addView(past_test);
Here are the relevant parts to my past_tests.xml file for reference -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="#+id/prev_test_view"
android:orientation="vertical" >
<RelativeLayout
android:id="#+id/past_tests"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/past_tests_label"
android:layout_centerHorizontal="true"
android:layout_marginTop="227dp" >
</RelativeLayout>
</LinearLayout>
Hope this helps anyone else who is having trouble pragmatically setting views in android

Adding custom relative layout to one single liner layout

I have made following relative layout in an xml file lets say add_relative_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="#+id/addAccountLinearLayout">
</LinearLayout>
Above is the main layout in which i want to add copies of below Code file.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/UIContainer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#android:color/white" >
<TextView
android:id="#+id/amountLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:text="Amount"
android:textColor="#android:color/black"
android:textStyle="bold" />
<EditText
android:id="#+id/amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp" >
</EditText>
I have another android xml file named as Show_all.xml. It is a linear layout xml
I want to add this relative layout above as many times as i want in this show_all layout
currently i am using this code
private void callOnCreate()
{
linear = (LinearLayout) findViewById(R.id.addAccountLinearLayout); // the layout in which i want to make dynamic copies of this layout.
layout = (RelativeLayout) findViewById(R.layout.ui_relative_layout_style); // name of xml File of above code.
for (int i=0; i < 4; i++)
{
Account account = accountArray.get(i);
linear.addView(layout, i);
}
}
I am getting Null point exception. Please tell me what to do .
Best Regards
Hello Umar I have no idea how you can use xml layout to add Dynamically But you can use Below Code to get Your Required thing add in to LinearLayout
public RelativeLayout createViewTOAdd(){
lp=new RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.FILL_PARENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
RelativeLayout mRelativeLayout=new RelativeLayout(this);
mRelativeLayout.setBackgroundColor(Color.WHITE);
TextView mTextView=new TextView(this);
RelativeLayout.LayoutParams Textview_lp=new RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
mTextView.setText("Amout");
Textview_lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
Textview_lp.addRule(RelativeLayout.CENTER_VERTICAL);
Textview_lp.leftMargin=10;
mTextView.setTextColor(Color.BLACK);
mTextView.setTextAppearance(this, R.style.TextStyle);
//mTextView.setLayoutParams(Textview_lp);
EditText mEditText=new EditText(this);
RelativeLayout.LayoutParams EditText_param=new RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT,android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
EditText_param.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
EditText_param.addRule(RelativeLayout.CENTER_VERTICAL);
EditText_param.rightMargin=10;
//mEditText.setLayoutParams(EditText_param);
//mRelativeLayout.addView(mTextView, 0);
//mRelativeLayout.addView(mEditText, 1);
//mRelativeLayout.addView(mTextView);
//mRelativeLayout.addView(mEditText);
mRelativeLayout.addView(mTextView, Textview_lp);
mRelativeLayout.addView(mEditText, EditText_param);
return mRelativeLayout;
}
Now How to add View in to LinearLayout is Below
mLinearLayout=(LinearLayout)findViewById(R.id.mainLinearView);
mLinearLayout.removeAllViews();
for(int i=0;i<4;i++){
mLinearLayout.addView(createViewTOAdd(), i);
}
Hey your are using findViewById to get the instance of relativelayout which is not available in your current layout show_all.xml .thats why you are getting null pointer exception.So create separate layout for that specific relativelayout and names that xml layout file as UIContianer then try to use below code
private void callOnCreate()
{
linear = (LinearLayout) findViewById(R.id.addAccountLinearLayout); // the layout in which i want to make dynamic copies of this layout.
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.ui_relative_layout_style, null);
for (int i=0; i < 4; i++)
{
Account account = accountArray.get(i);
linear.addView(vi, i);
}
}

Categories