Inconsistent TableRow width - Android - java

I have a TableLayout which is dynamically populated. On getting to the page, it shows as expected but the moment I switch away from the app or a call comes in, the layout is distorted, resulting in inconsistent column width as shown in the images below.
Find below, the code used to generate the table
XML
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="vertical|horizontal"
android:background="#color/colorPrimaryDark">
<TableLayout
android:id="#+id/predictionTableView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="1dp"
android:stretchColumns="*"
android:background="#color/colorPrimaryDark">
<TableRow>
<TextView
android:text="RESULT"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:background="#000"
android:layout_marginRight="1dp"/>
<TextView
android:text="TIME"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:layout_marginRight="1dp"
android:background="#000"/>
<TextView
android:text="LEAGUE"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:layout_marginRight="1dp"
android:background="#000"/>
<TextView
android:text="TEAM"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:layout_marginRight="1dp"
android:background="#000"/>
<TextView
android:text="PREDICTION"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:layout_marginRight="1dp"
android:background="#000"/>
<TextView
android:text="SCORE"
android:padding="1dp"
android:textSize="12sp"
android:textColor="#color/white"
android:background="#000"/>
</TableRow>
</TableLayout>
</HorizontalScrollView>
Java
int i = 1;
for (Prediction prediction : predictionCategory.getPredictions()) {
//int backgroundColor = (i%2 == 0 ? fragmentActivity.getResources().getColor(R.color.colorPrimaryDark) : fragmentActivity.getResources().getColor(R.color.colorAccent));
Drawable backgroundDrawable = fragmentActivity.getResources().getDrawable(R.drawable.table_cell_even); //(i%2 == 0 ? fragmentActivity.getResources().getDrawable(R.drawable.table_cell_even) : fragmentActivity.getResources().getDrawable(R.drawable.table_cell_odd));
int textColor = fragmentActivity.getResources().getColor(R.color.white);
TableRow tableRow = new TableRow(fragmentActivity);
tableRow.setBackground(backgroundDrawable);
int colWidth = predictionTableView.getChildAt(0).getWidth();
TextView timeTextView = new TextView(fragmentActivity);
TextView leagueTextView = new TextView(fragmentActivity);
TextView teamTextView = new TextView(fragmentActivity);
TextView predictionTextView = new TextView(fragmentActivity);
TextView scoreTextView = new TextView(fragmentActivity);
TextView resultTextView = new TextView(fragmentActivity);
timeTextView.setTypeface(Typeface.DEFAULT);
timeTextView.setText(prediction.getTime());
timeTextView.setTextSize(13);
timeTextView.setPadding(3, 3, 3, 3);
timeTextView.setBackground(backgroundDrawable);
timeTextView.setTextColor(textColor);
leagueTextView.setTypeface(Typeface.DEFAULT);
leagueTextView.setText(prediction.getLeagueName());
leagueTextView.setTextSize(13);
leagueTextView.setPadding(3, 3, 3, 3);
leagueTextView.setBackground(backgroundDrawable);
leagueTextView.setTextColor(textColor);
teamTextView.setTypeface(Typeface.DEFAULT);
teamTextView.setText(prediction.getLocalTeamName() + " - " + prediction.getVisitorTeamName());
teamTextView.setTextSize(13);
teamTextView.setPadding(3, 3, 3, 3);
teamTextView.setBackground(backgroundDrawable);
teamTextView.setTextColor(textColor);
predictionTextView.setTypeface(Typeface.DEFAULT);
predictionTextView.setText(prediction.getPrediction());
predictionTextView.setTextSize(13);
predictionTextView.setPadding(3, 3, 3, 3);
predictionTextView.setBackground(backgroundDrawable);
predictionTextView.setTextColor(textColor);
scoreTextView.setTypeface(Typeface.DEFAULT);
scoreTextView.setText(prediction.getScores());
scoreTextView.setTextSize(13);
scoreTextView.setPadding(3, 3, 3, 3);
scoreTextView.setBackground(backgroundDrawable);
scoreTextView.setTextColor(textColor);
resultTextView.setTypeface(Typeface.DEFAULT);
resultTextView.setText(prediction.getResult());
resultTextView.setTextSize(13);
resultTextView.setPadding(3, 3, 3, 3);
resultTextView.setBackground(backgroundDrawable);
resultTextView.setTextColor(textColor);
if (!prediction.getResult().matches("")) {
if (prediction.getResult().toUpperCase().matches("WIN")) {
resultTextView.setBackgroundColor(fragmentActivity.getResources().getColor(R.color.colorSuccess));
} else {
resultTextView.setBackgroundColor(fragmentActivity.getResources().getColor(R.color.colorDanger));
}
} /*else {
resultTextView.setText("LOST");
resultTextView.setBackgroundColor(fragmentActivity.getResources().getColor(R.color.colorDanger));
}*/
tableRow.addView(resultTextView);
tableRow.addView(timeTextView);
tableRow.addView(leagueTextView);
tableRow.addView(teamTextView);
tableRow.addView(predictionTextView);
tableRow.addView(scoreTextView);
TableLayout.LayoutParams trParamsSep = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
tableRow.setLayoutParams(trParamsSep);
predictionTableView.addView(tableRow);
i++;
}
What is it that I'm doing wrong? How do I maintain equal column width irrespective of whether the user switch away and come back to the app or stayed on it for long.

Reloading data onResume() works well for me. Thanks #SumitShukla

Related

3 Column TableLayout not centering properly in Android App

I have been working on this odd issue for about 6 hours now, and I have searched countlessly to no avail. I am now asking for help. I am currently trying to make a TableLayout with three columns to display texts of different lengths.
Here are some images.
Top left corner
Top Right Corner
The TableLayout is centered before I programmatically add rows to it.
public void populate(String name, String description, String grade){
row = new TableRow(this);
t1 = new TextView(this);
t1.setTextColor(getResources().getColor(R.color.colorPrimary));
t2 = new TextView(this);
t2.setTextColor(getResources().getColor(R.color.colorPrimary));
t3 = new TextView(this);
t3.setTextColor(getResources().getColor(R.color.colorPrimary));
t1.setText(name);
t2.setText(description);
t3.setText(grade);
t1.setTypeface(null, 1);
t2.setTypeface(null, 1);
t3.setTypeface(null, 1);
t1.setBackground(getResources() .getDrawable(R.drawable.cell_shape));
t2.setBackground(getResources() .getDrawable(R.drawable.cell_shape));
t3.setBackground(getResources() .getDrawable(R.drawable.cell_shape));
t1.setTextSize(15);
t2.setTextSize(15);
t3.setTextSize(15);
t1.setPadding(20, 0, 0, 0);
t2.setPadding(20, 0, 0, 0);
t3.setPadding(20, 0, 0, 0);
/*
t1.setGravity(1);
t2.setGravity(1);
t3.setGravity(1);*/
row.addView(t1);
row.addView(t2);
row.addView(t3);
table.addView(row, new
TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT,
TableLayout.LayoutParams.WRAP_CONTENT));
}
//Code for title columns:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:scrollbars="none"
app:layout_constraintDimensionRatio="1:1">
<HorizontalScrollView
android:id="#+id/horizontalView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dip"
android:scrollbars="horizontal|vertical">
<TableLayout
android:id="#+id/table1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:stretchColumns="*"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TableRow>
<TextView
android:width="90dp"
android:background="#drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:text="Name" />
<TextView
android:width="90dp"
android:background="#drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:text="Description" />
<TextView
android:width="90dp"
android:background="#drawable/cell_shape"
android:gravity="center_horizontal"
android:padding="3dip"
android:text="Grade" />
</TableRow>
</TableLayout>
</HorizontalScrollView>
</ScrollView>

Android TextView with Marquee and layout_weight not scrolling

I have a dialog popping up with a title and a close button. This is the XML:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:id="#+id/text_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="24dp"
android:layout_marginRight="0dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:maxLines="1"
<!--- android:singleLine="true" <-- Do not comment about this, it is deprecated --->
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="20sp"
android:textColor="#android:color/black"
/>
<ImageView
android:id="#+id/backburger"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:src="#drawable/ic_close"
android:foreground="?android:attr/selectableItemBackground"
/>
</LinearLayout>
Like you can see the TextView has all the things it needs for a marquee, the singleLine options is deprecated, so I can't use it. I do call setSelected(true) in my Java. There are lots of questions about a marquee, but none with layout_weight and from '17.
This is the preview of the XML:
Try this one:
In your Xml:
<TextView
android:id="#+id/text_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:textSize="20sp"
android:textColor="#android:color/black" />
and your Code:
tv = (TextView) this.findViewById(R.id.text_title);
tv.setSelected(true);
Hope its help:)
public void setticker(String text, TextView view) {
if (text != "") {
view.setText(text);
//view.setTextSize(25.0F);
Context context = view.getContext(); // gets the context of the view
// measures the unconstrained size of the view
// before it is drawn in the layout
view.measure(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
// takes the unconstrained width of the view
float width = view.getMeasuredWidth();
float height = view.getMeasuredHeight();
// gets the screen width
float screenWidth = ((Activity) context).getWindowManager()
.getDefaultDisplay().getWidth();
// view.setLayoutParams(new LinearLayout.LayoutParams((int) width,
// (int) height, 1f));
System.out.println("width and screenwidth are" + width + "/"
+ screenWidth + "///" + view.getMeasuredWidth());
// performs the calculation
float toXDelta = width - (screenWidth - 0);
// sets toXDelta to -300 if the text width is smaller that the
// screen size
if (toXDelta < 0) {
toXDelta = 0 - screenWidth;// -300;
} else {
toXDelta = 0 - screenWidth - toXDelta;// -300 - toXDelta;
}
// Animation parameters
Animation mAnimation = new TranslateAnimation(screenWidth,
toXDelta, 0, 0);
mAnimation.setDuration(15000);
mAnimation.setRepeatMode(Animation.RESTART);
mAnimation.setRepeatCount(Animation.INFINITE);
view.setAnimation(mAnimation);
//parent_layout.addView(view);
}
}

How can I programmatically set this tablelayout to have equal column widths for Android?

I am trying to create the rows below the table heading programmatically, but they are spilling over and I am not sure how to split them up to only take up 25% of the width each?
Here is the code for the row creation:
TableRow row = new TableRow(activity);
lp = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT, 1.0f);
tl = new TableLayout.LayoutParams();
tl.weight = 1;
lp.height = 100;
row.setLayoutParams(lp);
row.setWeightSum(4);
tv = new TextView(getActivity());
tv.setLayoutParams(tl);
tv.setTextSize(14);
tv.setText(whotos.get(i));
tv2 = new TextView(getActivity());
tv2.setLayoutParams(tl);
tv2.setTextSize(14);
tv2.setText(documents.get(i));
tv3 = new TextView(getActivity());
tv3.setLayoutParams(tl);
tv3.setTextSize(14);
tv3.setText(directions.get(i));
tv4 = new TextView(getActivity());
tv4.setLayoutParams(tl);
tv4.setTextSize(14);
tv4.setText(thedates.get(i));
row.addView(tv); //tp name
row.addView(tv2); //document type
row.addView(tv3); //direction
row.addView(tv4); //date
ll.addView(row, i + 1 + tableHeadingRows);
Here is my code for the layout above the programmatically created rows:
<TableRow
android:id="#+id/tableRow2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="5dip"
android:stretchColumns="1"
android:weightSum="4">
<TextView
android:id="#+id/tp"
android:layout_weight="1"
android:layout_width="0dp"
android:text="TP"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="#+id/doc"
android:layout_weight="1"
android:layout_width="0dp"
android:text="Doc"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="#+id/dir"
android:layout_weight="1"
android:layout_width="0dp"
android:text="Direction"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="#+id/date"
android:layout_weight="1"
android:layout_width="0dp"
android:text="Date"
android:textAppearance="?android:attr/textAppearanceLarge" />
</TableRow>
<!-- draw a red line -->
<View
android:layout_height="2dip"
android:background="#color/tableHorizontalRule" />
Does anyone have a solution to this issue?
I changed this over to a LinearLayout, as it simplified things a bit and allowed me to easily set column weights programmatically.

tableRow entries go off screen

I am using a table layout to show information based on a user specifications. The user enters data into a database, then this data is taken and displayed on a table were each row has 3 textView entries. The problem is that if the data entered by the user is to long, it goes off screen and is not visible. Any ideas? The code I used to do this is below:
xml
<TableLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="*"
android:id="#+id/tl">
<TableRow
android:id="#+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="1dp" >
<TextView
android:id="#+id/timeCol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Time"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#FF0000"/>
....
</TableRow>
</TableLayout>
Java
for (final String time : timesArray)
{
i++;
TableRow row1= new TableRow(this);
event = db.getEvent(i, gameId);
player = db.getPlayer(i, gameId);
TextView timeRow = new TextView(this);
TextView playerRow = new TextView(this);
TextView eventRow = new TextView(this);
timeRow.setText(time);
timeRow.setTextColor(Color.WHITE);
playerRow.setText(player);
playerRow.setTextColor(Color.WHITE);
eventRow.setText(event);
eventRow.setTextColor(Color.WHITE);
row1.addView(timeRow);
row1.addView(playerRow);
row1.addView(eventRow);
tl.addView(row1);
}
And it looks like this if the data is too long
SOLUTION!
Setting layout_width to 0 and then assigning layout_weight to a float based on the amount of the screen you want a column to take up (For example, 0.5 would let the column take up half the screen) allows all the information to be shown on the screen. The code to do this is below.
XML
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="#+id/tl">
<TableRow
android:id="#+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="1dp" >
<TextView
android:id="#+id/timeCol"
android:layout_width="0px"
android:layout_weight="0.2"
android:layout_height="wrap_content"
android:text="Time"/>
<TextView
android:id="#+id/playerCol"
android:layout_width="0px"
android:layout_weight="0.4"
android:layout_height="wrap_content"
android:text="Player"/>
<TextView
android:id="#+id/eventCol"
android:layout_width="0px"
android:layout_weight="0.4"
android:layout_height="wrap_content"
android:text="Event"/>
</TableRow>
java
TableLayout tl = (TableLayout) findViewById(R.id.tl);
TableRow row1= new TableRow(this);
TextView timeRow = new TextView(this);
TextView playerRow = new TextView(this);
TextView eventRow = new TextView(this);
TableRow.LayoutParams text1Params = new TableRow.LayoutParams();
text1Params.width = 0;
text1Params.weight = (float) 0.2;
TableRow.LayoutParams text2Params = new TableRow.LayoutParams();
text2Params.weight = (float) 0.4;
text2Params.width = 0;
TableRow.LayoutParams text3Params = new TableRow.LayoutParams();
text3Params.weight = (float) 0.4;
text3Params.width = 0;
timeRow.setLayoutParams(text1Params);
playerRow.setLayoutParams(text2Params);
eventRow.setLayoutParams(text3Params);
row1.addView(timeRow);
row1.addView(playerRow);
row1.addView(eventRow);
tl.addView(row1, params);

Android make whole tablerow clickable

I have a litte problem.
I want to create a Table with clickable TableRows.
Most of this works fine, but the OnClickListener does not work for the whole Tablerow.
The TableRow is not clickable where the vertical Scrollview Element is.
Is there a way to set a clicklistener for the whole Row?
Here a code snippet from the activity:
for (int i = 0; i <anzahl; i++) {
TableRow row = (TableRow) LayoutInflater.from(this).inflate(R.layout.pnunterhaltungslist, null);
TextView UnterhaltungsBetreff = (TextView) row.findViewById(R.id.Unterhaltungsbetreff);
TextView UnterhaltungsBeteiligte = (TextView) row.findViewById(R.id.Unterhaltungvon);
TextView UnterhaltungsUhrzeit = (TextView) row.findViewById(R.id.Uhrzeit);
TextView UnterhaltungsDatum = (TextView) row.findViewById(R.id.Datum);
row.setId(1000+i);
row.setClickable(true);
row.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent myIntent = new Intent(PNs.this, Main.class);
PNs.this.startActivity(myIntent);
}
});
UnterhaltungsBetreff.setText(Unterhaltungslist.get(i * 4 + 4) + " ");
UnterhaltungsBeteiligte.setText(Unterhaltungslist.get(i*4+2)+" ");
Date Datum = new Date(Integer.parseInt(Unterhaltungslist.get(i*4+3))*1000L);
DateFormat Datumf = new SimpleDateFormat("dd.MM.yy");
DateFormat Zeitf = new SimpleDateFormat("HH:mm");
UnterhaltungsUhrzeit.setText(Zeitf.format(Datum));
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
long todayInMillis = c.getTimeInMillis();
if(todayInMillis - (Integer.parseInt(Unterhaltungslist.get(i*4+3))*1000L)<= 0){
UnterhaltungsDatum.setText("Heute");
}
else if ((Integer.parseInt(Unterhaltungslist.get(i*4+3))*1000L) - (todayInMillis- 86400000) >= 0){
UnterhaltungsDatum.setText("Gestern");
}
else{
UnterhaltungsDatum.setText(Datumf.format(Datum));
}
Unterhalttable.addView(row,i);
}
}
Here the xml:
<?xml version="1.0" encoding="utf-8"?>
<TableRow
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#android:drawable/list_selector_background"
android:id="#+id/one">
<RelativeLayout
android:focusable="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="#+id/Unterhaltungrelativlayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="12:00"
android:id="#+id/Uhrzeit"
android:layout_alignTop="#+id/horizontalScrollView3"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="heute"
android:id="#+id/Datum"
android:layout_below="#+id/Uhrzeit"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:layout_marginTop="5dp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ff363132"
android:id="#+id/borderline"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="8dp"
android:layout_below="#+id/horizontalScrollView3" />
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="#+id/horizontalScrollView3"
android:layout_marginTop="8dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_toEndOf="#+id/Uhrzeit"
android:scrollbars="none"
android:layout_marginLeft="8dp"
android:layout_toLeftOf="#+id/Uhrzeit"
android:layout_marginRight="8dp">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="#+id/relativlayout1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Unterhaltung-Beteiligte"
android:id="#+id/Unterhaltungvon"
android:layout_gravity="left|bottom"
android:layout_below="#+id/Unterhaltungsbetreff"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="5dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Unterhaltungs-Betref blabasdkasnfdsadhfhsadfsadgsadögh"
android:id="#+id/Unterhaltungsbetreff"
android:layout_gravity="left|top"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
</HorizontalScrollView>
<View
android:layout_width="15dp"
android:layout_height="200dp"
android:background="#drawable/verlaufpn"
android:id="#+id/borderline2"
android:layout_toStartOf="#+id/Uhrzeit"
android:paddingTop="-2dp"
android:paddingBottom="-3dp"
android:layout_above="#+id/borderline"
android:layout_alignRight="#+id/horizontalScrollView3"/>
</RelativeLayout>
</TableRow>
Picture : (green clickable / red not clickable)
http://abload.de/img/screenshot_2014-09-17lpu6s.jpg
Try
<TableRow
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#android:drawable/list_selector_background"
android:clickable="true"
android:onClick="onTableRowClick"
android:id="#+id/one">
Then in your activity, create the function "onTableRowClick" and it will be called when the layout is clicked.

Categories

Resources