two-way-gridview inside a LinearLayout - android

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.

Related

GridView don't set the margins in ToggleButton programmatically

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

Android: ScrollView does not re-size when adding child views

I have a ScrollView that I am trying to populate dynamically. Here is the XML that contains the ScrollView:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f6f5f5" >
<ScrollView
android:id="#+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#40ff0000"
android:paddingBottom="70dp"
android:paddingTop="20dp"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<LinearLayout
android:id="#+id/option_list_container"
android:background="#40ffff00"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="#+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:background="#292929"
android:paddingBottom="5dp"
android:paddingLeft="15dp"
android:paddingTop="5dp"
android:text="Stap 3/5"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#color/white" />
</LinearLayout>
</ScrollView>
And here is the XML for the element I'm inserting in the ScrollvVew:
<?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="wrap_content"
android:orientation="horizontal" >
<np.custom.FontIcon
android:id="#+id/option_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#drawable/calendar_circleround"
android:textSize="40sp"
android:gravity="center"
android:text="#string/planit_selection_empty_circle"
android:textColor="#292929" />
<TextView
android:id="#+id/option_text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
This is the code I use to populate the scrollview:
ArrayList<String> g = new ArrayList<String>();
g.add("Fix a Bug");
g.add("Buy a new PC");
g.add("Make Coffee");
g.add("Take a Break");
g.add("Don't do that");
g.add("Throw your hands in the air like you just don't care!");
LinearLayout optionListLayout = (LinearLayout) rootView.findViewById(R.id.option_list_container);
LayoutInflater inflater = LayoutInflater.from(getActivity());
for(String p:g){
View v = inflater.inflate(R.layout.planit_option_item, null);
TextView optText = (TextView) v.findViewById(R.id.option_text);
optText.setText(p);
optionListLayout.addView(v);
}
This all works almost fine, except that the sizes of the ScrollView and the LinearLayout it contains do not come out as I expected. This a screenshot of that it looks like on a device, which shows text being cut out when it goes to a second line:
So how can I make sure the linear layout re-sizes to accommodate children views of different heights?
Your issue isn't the ScrollView not accommodating new children. The problem is that the text, when it spans more than one line, is being clipped due to layout parameters in R.layout.planit_option_item. Try changing the TextView of ID #+id/option_text so that its height is wrap_content.
Change your TextView for the ScrollView element to accommodate two lines:
...
<TextView
android:id="#+id/option_text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
android:maxLines="2"
android:singleLine="false"
android:textAppearance="?android:attr/textAppearanceMedium" />
...
This is not an issue with ScrollView, it's an issue with the specifications of the element you are inserting into the ScrollView. If you expect there may be more than 2 lines of text in some cases set maxLines = X where X is the maximum number of lines you expect.
Please let me know if this does not work and I would be happy to help further.

How to wordwrap checkbox text?

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?

ScrollView doesn't display whole TableLayout

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>

LinearLayout addView doesn't work properly

I'm having issues with the addView method from LinearLayout. I don't know why, but if I add three views only the first one is displayed. Here is the code:
Comment[] comments = posts[position].getComments();
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.post_list_item_comments);
layout.removeAllViews();
for(int i=0; i<comments.length; i++) {
View comment = inflater.inflate(R.layout.post_list_item_comment,null);
((TextView)comment.findViewById(R.id.post_list_item_comment_name)).setText(comments[i].getFrom().getName());
((TextView)comment.findViewById(R.id.post_list_item_comment_message)).setText(comments[i].getText());
layout.addView(comment,i);
}
I've tried with addView(comment) too, but with the same result.
This is the code of the View that I retrieve when to use the findViewById mehthod.
<LinearLayout
android:id="#+id/post_list_item_comments"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="40dip"
android:layout_below="#id/post_list_item_footer_text"
android:visibility="gone"/>
And this is the XML that I inflate:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<View
android:id="#+id/post_list_item_comment_divider"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="#drawable/divider"
android:layout_marginTop="2dip"
android:layout_marginBottom="2dip"/>
<ImageView
android:id="#+id/post_list_item_comment_photo"
android:layout_width="40dip"
android:layout_height="wrap_content"
android:layout_below="#id/post_list_item_comment_divider"
android:adjustViewBounds="true"/>
<TextView
android:id="#+id/post_list_item_comment_name"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_toRightOf="#id/post_list_item_comment_photo"
android:layout_below="#id/post_list_item_comment_divider"
android:maxLines="2"
android:ellipsize="end"/>
<TextView
android:id="#+id/post_list_item_comment_message"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_toRightOf="#id/post_list_item_comment_photo"
android:layout_below="#id/post_list_item_comment_name"
android:textSize="13sp"
android:maxLines="2"
android:ellipsize="end"/>
</RelativeLayout>
you do not declare the LinearLayout orientation... by default is Horizontal, try setting the orientation Vertical
<LinearLayout
android:id="#+id/post_list_item_comments"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="40dip"
android:layout_below="#id/post_list_item_footer_text"
android:visibility="gone"/>
Use the hierarchy viewer to check if there really is only 1 view added, or that you can see only one view. For instance, this line android:layout_below="#id/post_list_item_footer_text" might be troublesome if you repeat it? I don't know the expected behaviour for that...

Categories

Resources