I'm trying to set programmatically a ToggleButton inside of a Gridview. All seems that is working, but I can't set some properties like the margins between the togglebuttons that I'm adding in a loop for and this property: toogleBtn.setAllCaps(false); don't work.
Thanks in advance
This is my xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
style="#style/screen"
android:id="#+id/ly_general"
android:fitsSystemWindows="true"
android:background="#color/colorPrimary">
<TextView
android:text="#string/your_interest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#color/white"
android:textSize="#dimen/text_size_22"
android:id="#+id/text_init_session"
android:layout_marginTop="#dimen/margin_26"
android:layout_marginLeft="#dimen/padding_20"
android:layout_below="#+id/image"/>
<TextView
android:text="#string/select_categories"
android:textColor="#color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/text_init_session"
android:layout_alignLeft="#+id/text_init_session"
android:layout_alignStart="#+id/text_init_session"
android:layout_marginTop="22dp"
android:id="#+id/textViewExplanation" />
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
style="#style/screen"
android:id="#+id/scroll"
android:layout_below="#+id/textViewExplanation">
<GridLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="#+id/lyCategory"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:columnCount="3"
android:layout_marginTop="#dimen/padding_40">
</GridLayout>
</ScrollView>
</RelativeLayout>
This is my code in java class:
for (int i = 0; i < arrayList.size(); i++) {
final ToggleButton toogleBtn = new ToggleButton (RegisterThreeActivityNew.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, GridLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(20, 20, 20, 20);
toogleBtn.setLayoutParams(params);
toogleBtn.setWidth(140);
toogleBtn.setHeight(20);
toogleBtn.setTextSize(12);
toogleBtn.setAllCaps(false);
toogleBtn.setText(arrayList.get(i).getName());
toogleBtn.setTextOff(arrayList.get(i).getName());
toogleBtn.setTextOn(arrayList.get(i).getName());
toogleBtn.setTextColor(ResourcesCompat.getColor(getResources(), R.color.white, null));
toogleBtn.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.btn_category, null));
layoutCategories.addView(toogleBtn);
}
In your xml file inside toggle button set these properties
android:minWidth="10dp" // use what ever minimum value you need
android:minHeight="10dp"
if you dont decrease the minwidth in xml then how much ever you try to decrease its width & height it won't work.I suffered with this problem for 2 days
Related
I'm kind of stuck with a problem and I hope you can help me. Im developing an Android application with Android Studio.
I have a TableLayout with 2 elements. The first column is a LinearLayout with a percentage painted in the background, and the second column, just a simple textview (for the example, I put two rows in it).
I have solved the problem with XML representation, and I need to do the same but programmatically. Here is my XML:
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id = "#+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#color/orionBackground"
android:orientation="horizontal"
android:weightSum="100">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="30"
android:background="#color/orionRed">
<TextView
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text=""
android:layout_gravity="right"
android:textColor="#color/orionWhite"/>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:layout_gravity="right"
android:background="#color/orionBackground"
android:textColor="#color/orionWhite"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#color/orionBackground"
android:orientation="horizontal"
android:weightSum="100">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="50"
android:background="#color/orionRed">
<TextView
android:layout_width="30dp"
android:layout_height="wrap_content"
android:text=""
android:textColor="#color/orionWhite"/>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="There"
android:layout_gravity="right"
android:background="#color/orionBackground"
android:textColor="#color/orionWhite"/>
</TableRow>
</TableLayout>
I need to do the same but programmatically and I don't know how could be wrong with what Im doing. Here is my code:
TableLayout table = (TableLayout)findViewById(R.id.tableLayout);
/*TextView*/
TextView textViewHelloWorld = new TextView(getBaseContext());
textViewHelloWorld.setText("");
textViewHelloWorld.setLayoutParams(
new ViewGroup.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT));
textViewHelloWorld.setTextColor(Color.parseColor("#FFFFFF"));
/*Child Layout*/
LinearLayout linearLayout = new LinearLayout(getBaseContext());
/*Here I set the percentage of the LinearLayout to 10*/
LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
0, ViewGroup.LayoutParams.MATCH_PARENT, 10f);
linearLayout.setLayoutParams(params1);
linearLayout.setBackgroundColor(Color.parseColor("#A23934"));
/*Textbox Added | I tested before the above line*/
linearLayout.addView(textViewHelloWorld);
/*Parent Layout*/
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,100f);
LinearLayout parentLayout = new LinearLayout(getBaseContext());
parentLayout.setOrientation(LinearLayout.HORIZONTAL);
/*Finally, I added the LinearLayout into de parent LinearLayout*/
parentLayout.addView(linearLayout,params);
TableRow rowHeader = new TableRow(getBaseContext());
TableRow.LayoutParams params10 = new TableRow.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
rowHeader.setLayoutParams(params10);
/*Then, the linear layout is Added into de TableRow*/
rowHeader.addView(parentLayout);
/*And added to the row*/
table.addView(rowHeader);
Visually, this is how I need to see it:
What I want to accomplish
This is for an app that will show the percentage of amount in a order book of cryptocurrencies.
My issue is that my solution print the whole background and should be print only a part of the background. The image above, prints the percentage, 30 and 60, defined by the layout_weight attribute, but when I do it programmatically doesnt work at all.
Why isnt working?
I really hope you can help me with this.
Thanks a lot
try to set elevation to TextView like ViewCompat.setElevation(textViewHelloWorld, 10);
so this be like
TextView textViewHelloWorld = new TextView(getBaseContext());
textViewHelloWorld.setText("sample text");
textViewHelloWorld.setLayoutParams(
new ViewGroup.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT));
textViewHelloWorld.setTextColor(Color.parseColor("#FFFFFF"));
ViewCompat.setElevation(textViewHelloWorld, 10);
I have an XML Layout with imageButton and I want add "later" some imageButtons programmatically. Unfortunetly the added buttons cover the XML button. How can I use the zindex? Zindex attribute doesn't exist. I want #+id/btn_surface upper.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:fillViewport="false">
<RelativeLayout
android:id="#+id/rLayoutss"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="5000px"
android:layout_height="fill_parent"
android:background="#drawable/repeattile"
tools:context="com.some.asc.somesystems.SomeActivity"
>
<ImageView
android:layout_height="fill_parent"
android:layout_width="5000px"
android:id="#+id/iw_pcover"
android:background="#drawable/repeatovertile"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>
<RelativeLayout
android:layout_width="800px"
android:layout_height="480px"
android:background="#color/gray"
android:visibility="visible"
android:id="#+id/rl_all_hud"
>
<LinearLayout
android:layout_width="105px"
android:layout_height="106px"
android:visibility="visible"
android:id="#+id/ll_surface"
android:orientation="vertical">
<ImageButton
android:layout_width="106px"
android:layout_height="105px"
android:id="#+id/btn_surface"
android:background="#drawable/terr_button_surface"
/>
<TextView
android:layout_width="94px"
android:layout_height="105px"
android:id="#+id/tv_surface"
android:text="Surface"
android:layout_marginLeft="6dp"
android:layout_marginTop="-26dp"
android:textColor="#android:color/white"
android:textSize="14px"
android:shadowColor="#android:color/black"
android:shadowDx="2"
android:shadowDy="2"
android:shadowRadius="2"
/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</HorizontalScrollView>
</ScrollView>
Add imageButton:
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rLayoutss);
ImageButton largeIcon = new ImageButton(context);
largeIcon.setImageResource(
getResources().getIdentifier(PObject.getString("imgsrc"), "drawable", getPackageName())
);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(80,80);
lp.leftMargin = 100;
lp.topMargin = 100;
largeIcon.setLayoutParams(lp);
largeIcon.setScaleType(ImageView.ScaleType.FIT_CENTER);
largeIcon.setBackgroundColor(Color.TRANSPARENT);
relativeLayout.addView(largeIcon);
Thanks for any help
When you add your childView, largeIcon in this case you want to use the ViewGroup.addView(View view, int index) method. This will allow you to specify which order you want your views to appear in.
For your case, you might want to try: relativeLayout.addView(largeIcon, 0);
I'm having a few issues getting the Two Way Gridview library (originally by Jess Andres https://github.com/jess-anders/two-way-gridview ) to work in a LinearLayout.
Jess' example code just has the gridview in the layout xml by itself, however I need to add additional elements around the gridview hence have put the element and the gridview inside a LinearLayout.
The issue is that I'm getting the following error...
java.lang.ClassCastException: android.widget.AbsListView$LayoutParams cannot be cast to two_way_gridview_gradle.TwoWayAbsListView$LayoutParams
at two_way_gridview_gradle.TwoWayGridView$HorizontalGridBuilder.onMeasure(TwoWayGridView.java:2872)
at two_way_gridview_gradle.TwoWayGridView.onMeasure(TwoWayGridView.java:286)
I understand that the issue is that the inflator is attempting to assign parameters from TwoWayAbsList to the LinearLayout parameters, but I haven't a clue as to how to force it to use only the TwoWayAbsListView parameters
Here's my layout file....
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="#+id/caller_text"
android:layout_width="174dp"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
android:lines="2"
android:textSize="17sp"
android:text="First text block"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"/>
<two_way_gridview_gradle.TwoWayGridView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="#+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#E8E8E8"
app:cacheColorHint="#E8E8E8"
app:columnWidth="80dp"
app:rowHeight="80dp"
app:gravity="center"
app:horizontalSpacing="16dp"
app:verticalSpacing="16dp"
app:numColumns="auto_fit"
app:numRows="auto_fit"
app:scrollDirectionLandscape="horizontal"
app:scrollDirectionPortrait="horizontal"
app:stretchMode="spacingWidthUniform"
/>
<TextView
android:id="#+id/cancel_text"
android:layout_width="174dp"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
android:lines="2"
android:textSize="17sp"
android:text="Second text block"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"/>
</LinearLayout>
And here's how I'm inflating the view in the activity onCreate() method....
setContentView(R.layout.activity_meetingcaller);
TwoWayGridView gridView = (TwoWayGridView) findViewById(R.id.gridview);
// Instance of ImageAdapter Class
gridView.setAdapter(new GridImageAdapter(this));
I have been messing around to implement Two-way gridview, but finally implemented it my way:
<ScrollView
android:id="#+id/mainscrolView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<HorizontalScrollView
android:id="#+id/rclv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TableLayout
android:id="#+id/table"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="*"
>
</TableLayout>
</LinearLayout>
</HorizontalScrollView>
</ScrollView>
I add the children of TableLayout programmatically. Like:
TableLayout tv = findViewById(R.id.table);
tv.removeAllViewsInLayout();
TableRow tr = new TableRow(AndroidDatabaseManager.this);
tr.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
TextView b3 = new TextView(AndroidDatabaseManager.this);
b3.setText("Child");
tr.addView(b3);
tv.addView(tr);
final View vline = new View(AndroidDatabaseManager.this);
vline.setLayoutParams(new
TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,2));
vline.setBackgroundColor(Color.BLUE);
tv.addView(vline);
If you want to add border to cells. There's a little workaround for it.
I have a layout where I put i rows dynamically in a tablelayout that is inside a scrollview. Everything is working smoothly except that I don't can get the checkbox text to wordwrap (See xml below). The text is also set at runtime. I have searched the internet and has made a lot of trying to set different properties with no luck so far.
Is this task possible to achieve?
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="15dip">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="#+id/bes_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<EditText
android:id="#+id/bes_kommentar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="#+id/bes_checkbox" />
</RelativeLayout>
</TableRow>
CheckBox extends TextView, so I assume you can wrap its text like they solve the issue in this post :
Android TextView Text not getting wrapped
If you cannot get it to work like that, you can maybe also try, using match_parent in the checkbox.
<CheckBox
android:id="#+id/bes_checkbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="" />
hope it helps.
use table row inside the Linear layout instead of table layout..
android:id="#+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dip" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<CheckBox
android:id="#+id/bes_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="#+id/bes_kommentar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/bes_checkbox" />
</RelativeLayout>
</TableRow>
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dip" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<CheckBox
android:id="#+id/bes_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="#+id/bes_kommentar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="#+id/bes_checkbox" />
</RelativeLayout>
</TableRow>
</LinearLayout>
I have made dynamic layouts with checkboxes in the past and used this approach:
// Create new view to add layout to
sv = new ScrollView(this);
// Create new layout to add check boxes to
ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
// Add layout to view
sv.addView(ll);
// Create 6 check boxes
int itemSize = 6;
for(int j=0; j<itemSize; j++){
CheckBox cb = new CheckBox(this);
cb.setText("number " + j);
ll.addView(cb);
}
// Finalize view
this.setContentView(sv);
Is this what you are looking for?
I want to display a TableLayout within a ScrollView. The Table has 9 TableRows but the ScrollView starts displaying parts of the 4th row and I can't sroll up to see the rows above.
The XML-Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/uyi_choosepi_relativelayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:keepScreenOn="true" >
<MyGallery
android:id="#+id/uyi_gallery_originals"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"/>
<TableLayout
android:id="#+id/uyi_choosepi_buttontable"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:stretchColumns="0,1" >
<TableRow >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hilfe"
android:onClick="showHelp"
android:drawableLeft="#android:drawable/ic_menu_help" />
<Button
android:id="#+id/uyi_choosepi_savepw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fertig"
android:clickable="false"
android:enabled="false"
android:onClick="savePassword"
android:drawableLeft="#android:drawable/ic_menu_save"/>
</TableRow>
</TableLayout>
<ScrollView
android:id="#+id/uyi_choosepi_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="#id/uyi_gallery_originals"
android:layout_above="#id/uyi_choosepi_buttontable">
<TableLayout
android:id="#+id/uyi_choosepi_tablelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:layout_gravity="center_vertical"
android:shrinkColumns="0,1,2" />
</ScrollView>
</RelativeLayout>
The TableRows in the uyi_choosepi_tablelayout where added programmatically as follows:
table = (TableLayout) findViewById(R.id.uyi_choosepi_tablelayout);
for (int i = 0; i < UYIMainActivity.PASS_LENGTH; i++) {
TableRow row = new TableRow(table.getContext());
originalViews[i] = new ImageView(row.getContext());
originalViews[i].setAdjustViewBounds(true);
originalViews[i].setScaleType(ScaleType.FIT_XY);
originalViews[i].setPadding(3, 3, 3, 3);
originalViews[i].setImageResource(R.drawable.oempty);
distortedViews[i] = new ImageView(row.getContext());
distortedViews[i].setAdjustViewBounds(true);
distortedViews[i].setScaleType(ScaleType.FIT_XY);
distortedViews[i].setPadding(3, 3, 3, 3);
distortedViews[i].setImageResource(R.drawable.wempty);
ImageView arrow = new ImageView(row.getContext());
arrow.setAdjustViewBounds(true);
arrow.setScaleType(ScaleType.FIT_XY);
arrow.setMaxWidth(80);
arrow.setPadding(3, 3, 3, 3);
arrow.setImageResource(R.drawable.arrow_active);
row.addView(originalViews[i]);
row.addView(arrow);
row.addView(distortedViews[i]);
table.addView(row);
}
I hope you can give me a hint!
Try using a GridView instead that may get you further towards your goal. I saw [this blog post][1] recently, and I would have approached it more along these lines.
Edit: I meant to paste this tutorial sorry, http://android-coding.blogspot.com/2011/09/custom-gridview-ii-with-imageview-and.html
I solved my problem by surrounding the TableLayout with a LinearLayout
<ScrollView
android:id="#+id/uyi_choosepi_scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="#id/uyi_gallery_originals"
android:layout_above="#id/uyi_choosepi_buttontable">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TableLayout
android:id="#+id/uyi_choosepi_tablelayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:shrinkColumns="0,1,2" />
</LinearLayout>
</ScrollView>