[Q] Code Optimization Of Wallpaper App - Java for Android App Development

Hey friend I am making a wallpaper app using bitmap.. I have more than 50 images for this app...The problem I am facing is that I have to add line of code for all the images in the java code as well as xml file...
So please let me know that is there any way to overcome this by adding any loop or something...anything which can reduce my code and I can add more images...
The java code which I am repeating is(just few line which are getting repeated) :
display = (ImageView) findViewById(R.id.IVDisplay);
ImageView image1 = (ImageView) findViewById(R.id.viewImage1);
ImageView image2 = (ImageView) findViewById(R.id.viewImage2);
ImageView image3 = (ImageView) findViewById(R.id.viewImage3);
ImageView image4 = (ImageView) findViewById(R.id.viewImage4);
ImageView image5 = (ImageView) findViewById(R.id.viewImage5);
ImageView image6 = (ImageView) findViewById(R.id.viewImage6);
ImageView image7 = (ImageView) findViewById(R.id.viewImage7);
ImageView image8 = (ImageView) findViewById(R.id.viewImage8);
ImageView image9 = (ImageView) findViewById(R.id.viewImage9);
so on
then after that again in java code itself
toPhone = R.id.IVDisplay;
image1.setOnClickListener(this);
image2.setOnClickListener(this);
image3.setOnClickListener(this);
image4.setOnClickListener(this);
image5.setOnClickListener(this);
image6.setOnClickListener(this);
image7.setOnClickListener(this);
image8.setOnClickListener(this);
image9.setOnClickListener(this);
so on
then in switch case I have to repeat the code again
switch (v.getId()){
case R.id.viewImage1:
display.setImageResource(R.drawable.a);
toPhone = R.drawable.a;
break;
case R.id.viewImage2:
display.setImageResource(R.drawable.b);
toPhone = R.drawable.b;
break;
case R.id.viewImage3:
display.setImageResource(R.drawable.c);
toPhone = R.drawable.c;
break;
case R.id.viewImage4:
display.setImageResource(R.drawable.d);
toPhone = R.drawable.d;
break;
case R.id.viewImage5:
display.setImageResource(R.drawable.e);
toPhone = R.drawable.e;
break;
case R.id.viewImage6:
display.setImageResource(R.drawable.f);
toPhone = R.drawable.f;
break;
case R.id.viewImage7:
display.setImageResource(R.drawable.g);
toPhone = R.drawable.g;
break;
case R.id.viewImage8:
display.setImageResource(R.drawable.h);
toPhone = R.drawable.h;
break;
and so on
case R.id.setBG:
Bitmap bMap = BitmapFactory.decodeStream(getResources().openRawResource(toPhone));
try{
getApplicationContext().setWallpaper(bMap);
}catch(IOException e){
e.printStackTrace();
}
Now coming to the XML parth even there I have to add all the images...
<LinearLayout
android:layout_width="150dp"
android:layout_height="wrap_content"
androidrientation="horizontal" >
<ImageView
android:id="@+id/viewImage1"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/a" />
<ImageView
android:id="@+id/viewImage2"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/b" />
<ImageView
android:id="@+id/viewImage3"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/c" />
<ImageView
android:id="@+id/viewImage4"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/d" />
<ImageView
android:id="@+id/viewImage5"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/e" />
<ImageView
android:id="@+id/viewImage6"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/f" />
<ImageView
android:id="@+id/viewImage7"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/g" />
<ImageView
android:id="@+id/viewImage8"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/h" />
<ImageView
android:id="@+id/viewImage9"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/i" />
and so on...
Friends please dont give negative rating...I have already made this app but there are 51 images and I have to write code for 51...I want to optimize my app so that I can add more images and even I would get to learn a new thing. Hope someone would come and help me with this optimization thing...
Thanks

coolbud012 said:
Hey friend I am making a wallpaper app using bitmap.. I have more than 50 images for this app...The problem I am facing is that I have to add line of code for all the images in the java code as well as xml file...
So please let me know that is there any way to overcome this by adding any loop or something...anything which can reduce my code and I can add more images...
The java code which I am repeating is(just few line which are getting repeated) :
display = (ImageView) findViewById(R.id.IVDisplay);
ImageView image1 = (ImageView) findViewById(R.id.viewImage1);
ImageView image2 = (ImageView) findViewById(R.id.viewImage2);
ImageView image3 = (ImageView) findViewById(R.id.viewImage3);
ImageView image4 = (ImageView) findViewById(R.id.viewImage4);
ImageView image5 = (ImageView) findViewById(R.id.viewImage5);
ImageView image6 = (ImageView) findViewById(R.id.viewImage6);
ImageView image7 = (ImageView) findViewById(R.id.viewImage7);
ImageView image8 = (ImageView) findViewById(R.id.viewImage8);
ImageView image9 = (ImageView) findViewById(R.id.viewImage9);
so on
then after that again in java code itself
toPhone = R.id.IVDisplay;
image1.setOnClickListener(this);
image2.setOnClickListener(this);
image3.setOnClickListener(this);
image4.setOnClickListener(this);
image5.setOnClickListener(this);
image6.setOnClickListener(this);
image7.setOnClickListener(this);
image8.setOnClickListener(this);
image9.setOnClickListener(this);
so on
then in switch case I have to repeat the code again
switch (v.getId()){
case R.id.viewImage1:
display.setImageResource(R.drawable.a);
toPhone = R.drawable.a;
break;
case R.id.viewImage2:
display.setImageResource(R.drawable.b);
toPhone = R.drawable.b;
break;
case R.id.viewImage3:
display.setImageResource(R.drawable.c);
toPhone = R.drawable.c;
break;
case R.id.viewImage4:
display.setImageResource(R.drawable.d);
toPhone = R.drawable.d;
break;
case R.id.viewImage5:
display.setImageResource(R.drawable.e);
toPhone = R.drawable.e;
break;
case R.id.viewImage6:
display.setImageResource(R.drawable.f);
toPhone = R.drawable.f;
break;
case R.id.viewImage7:
display.setImageResource(R.drawable.g);
toPhone = R.drawable.g;
break;
case R.id.viewImage8:
display.setImageResource(R.drawable.h);
toPhone = R.drawable.h;
break;
and so on
case R.id.setBG:
Bitmap bMap = BitmapFactory.decodeStream(getResources().openRawResource(toPhone));
try{
getApplicationContext().setWallpaper(bMap);
}catch(IOException e){
e.printStackTrace();
}
Now coming to the XML parth even there I have to add all the images...
<LinearLayout
android:layout_width="150dp"
android:layout_height="wrap_content"
androidrientation="horizontal" >
<ImageView
android:id="@+id/viewImage1"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/a" />
<ImageView
android:id="@+id/viewImage2"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/b" />
<ImageView
android:id="@+id/viewImage3"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/c" />
<ImageView
android:id="@+id/viewImage4"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/d" />
<ImageView
android:id="@+id/viewImage5"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/e" />
<ImageView
android:id="@+id/viewImage6"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/f" />
<ImageView
android:id="@+id/viewImage7"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/g" />
<ImageView
android:id="@+id/viewImage8"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/h" />
<ImageView
android:id="@+id/viewImage9"
android:layout_width="125dp"
android:layout_height="150dp"
androidadding="15dp"
android:src="@drawable/i" />
and so on...
Friends please dont give negative rating...I have already made this app but there are 51 images and I have to write code for 51...I want to optimize my app so that I can add more images and even I would get to learn a new thing. Hope someone would come and help me with this optimization thing...
Thanks
Click to expand...
Click to collapse
Hi,
Well, you could create an ArrayList<ImageView> and iterate through it using a for or a for-each loop. ( http://www.leepoint.net/notes-java/flow/loops/foreach.html)
The for-each loop can be used for the onClickListener.
For the ids: Use a for loop and get the ids from strings containing the name of the id. ( http://stackoverflow.com/questions/8438943/how-to-find-view-from-string-instead-of-r-id)
Add the views to the ArrayList.
For the xml file: You can also add these views programmatically in your Java code. Google that.
---------- Post added 5th May 2013 at 12:05 AM ---------- Previous post was 4th May 2013 at 11:59 PM ----------
You can replace the switch thing with that:
1) get the position of the View in your ArrayList
2) get the character which is at that position in the alphabet.
3) get the id of the drawable using the method you can use for the ids. Just replace"id" with "drawable".
=> No need for a switch statement.

I will try to implement the above method and will get back soon...Please dont mind if I face problem while doing @ above..
Thanks

Related

How to set the background of an activity

Ok so im just practising my android skills. What I did was basically make an app that lets the user choose what image to set as the wallpaper or the background of the app.
Ive set the wallpaper up but couldnt find a way to setting the background up for the app/activity.
XML:
Code:
<?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" >
<ImageView
android:id="@+id/IVDisplay"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@drawable/bentley" />
<HorizontalScrollView
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="100dp" >
<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/img1"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:src="@drawable/bentley" />
<ImageView
android:id="@+id/img2"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:src="@drawable/bugatti" />
<ImageView
android:id="@+id/img3"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:src="@drawable/dodge" />
<ImageView
android:id="@+id/img4"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:src="@drawable/ic_launcher" />
<ImageView
android:id="@+id/img5"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="10dp"
android:src="@drawable/rollsroyce" />
</LinearLayout>
</HorizontalScrollView>
<Button
android:id="@+id/wallpaperbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set as wallpaper" />
<Button
android:id="@+id/bkgbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set as Background" />
</LinearLayout>
Java:
Code:
package com.examples.hello;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class PAGEONE extends Activity implements OnClickListener {
ImageView display;
int tophone;
[user=439709]@override[/user]
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.bkgd);
display = (ImageView) findViewById(R.id.IVDisplay);
tophone = R.drawable.bentley;
Button wallpap = (Button) findViewById(R.id.wallpaperbutton);
Button bkg = (Button) findViewById(R.id.bkgbutton);
ImageView img1 = (ImageView) findViewById(R.id.img1);
ImageView img2 = (ImageView) findViewById(R.id.img2);
ImageView img3 = (ImageView) findViewById(R.id.img3);
ImageView img4 = (ImageView) findViewById(R.id.img4);
ImageView img5 = (ImageView) findViewById(R.id.img5);
img1.setOnClickListener(this);
img2.setOnClickListener(this);
img3.setOnClickListener(this);
img4.setOnClickListener(this);
img5.setOnClickListener(this);
wallpap.setOnClickListener(this);
}
[user=439709]@override[/user]
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.img1:
display.setImageResource(R.drawable.bentley);
tophone = R.drawable.bentley;
break;
case R.id.img2:
display.setImageResource(R.drawable.bugatti);
tophone = R.drawable.bugatti;
break;
case R.id.img3:
display.setImageResource(R.drawable.dodge);
tophone = R.drawable.dodge;
break;
case R.id.img4:
display.setImageResource(R.drawable.ic_launcher);
tophone = R.drawable.ic_launcher;
break;
case R.id.img5:
display.setImageResource(R.drawable.rollsroyce);
tophone = R.drawable.rollsroyce;
break;
case R.id.wallpaperbutton:
InputStream yea = getResources().openRawResource(tophone);
Bitmap hmm = BitmapFactory.decodeStream(yea);
WallpaperManager mywallpaper = WallpaperManager.getInstance(getApplicationContext ());
try{
mywallpaper.setResource(tophone);
}catch(IOException e){
e.printStackTrace();
}
}
}
}
I dont know what methods to use. I was thinking of setting up individual pictures as the layouts (so I'd have 5 extra layouts since I have 5 pictures), but that wouldn't make any sense.
You need to give your linearlayout an id and then find the view by normal ways and use:
yourLayout.setBackgroundDrawable(Drawable d);
Code:
LinearLayout linLay = (LinearLayout) findViewById(R.id.theLinearLayoutId);
//set background to a color
linLay.setBackgroundColor("#404040");
//set background to a drawable
linLay.setBackgroundDrawable(drawableItem);
//set background to a resource
linLay.setBackgroundResource(R.id.backgroundResource);
Or just
Code:
getWindow().getDecorView().setBackgroundDrawable(*yourDrawable*);
After setContentView
Thanks for your help guys. I followed Chris95x8's advice since its only one line of code and really, who can deny one line of code??
Anyways, took a few tries to make it work but finally did it. I put that statement after the set content view but got errors and plus that statement is deprecated so I used this methd:
getWindow().getDecorView().setBackgroundResource();
I just pasted it into the switch statement I created earlier:
case R.id.bkgbutton:
getWindow().getDecorView().setBackgroundResource(tophone);
break;
Whilst I was at it, created a few toasts letting the user know the background/wallpaper has been set.
One thing I dont understand, what does it mean by context? For example, when using the toast method:
Toast df = Toast.makeText(context, text, duration)
What does the context mean in the bracket/parenthesis ?
TwilightLoz said:
Thanks for your help guys. I followed Chris95x8's advice since its only one line of code and really, who can deny one line of code??
Anyways, took a few tries to make it work but finally did it. I put that statement after the set content view but got errors and plus that statement is deprecated so I used this methd:
getWindow().getDecorView().setBackgroundResource();
I just pasted it into the switch statement I created earlier:
case R.id.bkgbutton:
getWindow().getDecorView().setBackgroundResource(tophone);
break;
Whilst I was at it, created a few toasts letting the user know the background/wallpaper has been set.
One thing I dont understand, what does it mean by context? For example, when using the toast method:
Toast df = Toast.makeText(context, text, duration)
What does the context mean in the bracket/parenthesis ?
Click to expand...
Click to collapse
Hi,
Please check this out to know what the Context class does - http://stackoverflow.com/questions/3572463/what-is-context-in-android
Good luck

Stackview Widget - Items not loading

I've tried to create simple dialer widget that will get contacts from contact book, put them into stackview and when clicked create a popup where you can call or create a message. I worked well as an application, but when I turned it into actual widget, I've encountered something weird. Despite all the methods firing, the items are not updated and stay on loading layout.
I've compared it to the example, tried to switch parts of code and nothing works. Even funnier, my code works perfectly when I put it in example widget, but example code doesn't work in mine. The same thing happens for listview and gridview. Is there any other file I should edit?
I provide the code, layouts and manifest. Logcat shows all methods firing in right order, so there's nothing to see there.
WidgetProvider.java
Code:
public class WidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds){
Log.d("WIDGET", "Called onUpdate()");
for (int i = 0; i < appWidgetIds.length; ++i){
// Set up the intent that starts the StackViewService, which will
// provide the views for this collection.
Intent intent = new Intent(context, WidgetService.class);
// Add the app widget ID to the intent extras.
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
// Instantiate the RemoteViews object for the app widget layout.
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.main);
rv.setRemoteAdapter(R.id.stackView, intent);
rv.setEmptyView(R.id.stackView, R.id.emptyView);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);
Log.d("WIDGET", "Widget updated");
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
WidgetService.java
Code:
package com.chmis.superdialer;
import java.util.Collections;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
public class WidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return new StackRemoteViewsFactory(this.getApplicationContext(), intent);
}
}
class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory {
Context context;
Intent intent;
public StackRemoteViewsFactory(Context applicationContext, Intent intent) {
this.context = applicationContext;
this.intent = intent;
}
@Override
public void onCreate() {
Log.d("SERVICE", "Called onCreate()");
//Get contact Cursor
Cursor contactCursor = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
//Get contacts from cursor, store them as Contact objects inside ArrayList
while (contactCursor.moveToNext()) {
String name = contactCursor.getString(contactCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = contactCursor.getString(contactCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
long id = contactCursor.getLong(contactCursor.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Contact.array.add(new Contact(name, phone, id));
}
//Sort contacts by name
Collections.sort(Contact.array, new ContactComparator(Contact.JOHN_SMITH));
}
@Override
public RemoteViews getViewAt(int position) {
Log.d("SERVICE", "Called getViewAt(" + position + ")");
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.main);
rv.setTextViewText(R.id.contactNameTextView, Contact.array.get(position).getDefaultName());
// Return the remote views object.
return rv;
}
@Override
public int getCount() {
Log.d("SERVICE", "Called getCount(), returned " + Contact.array.size());
return Contact.array.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public RemoteViews getLoadingView() {
return null;
}
@Override
public int getViewTypeCount() {
return 0;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public void onDataSetChanged() {}
@Override
public void onDestroy() {
Contact.array.clear();
Log.d("SERVICE", "Called onDestroy()");
}
}
main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<StackView
android:id="@+id/stackView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:loopViews="true" />
<TextView
android:id="@+id/emptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@android:color/transparent"
android:textStyle="bold"
android:textColor="#ffffff"
android:text="@string/no_contacts" />
</FrameLayout>
contact_stack_item
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/transparent_dark" >
<ImageView
android:id="@+id/contactPhotoImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:contentDescription="@string/contact_image_description"
android:src="@drawable/contact_photo_default" />
<TextView
android:id="@+id/contactNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/contactPhotoImageView"
android:layout_alignLeft="@+id/contactPhotoImageView"
android:layout_alignRight="@+id/contactPhotoImageView"
android:background="@color/transparent_dark"
android:gravity="center_horizontal"
android:text="@string/contact_name_placeholder"
android:textColor="@android:color/white" />
</RelativeLayout>
manifest
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.chmis.superdialer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<application android:label="@string/app_name" >
<receiver android:name="WidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/app_widget_provider_info" />
</receiver>
<service
android:name="WidgetService"
android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" />
</application>
</manifest>
@edit I've copied the whole service code again and now it decided to work. I don't know anything anymore.

listView Resize animation

I have this custom listView:
<?xml version="1.0" encoding="utf-8"?>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tableRow">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/imdDesc" />
<TextView
android:id="@+id/titleList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="25sp"
android:autoText="false"
android:gravity="center_vertical|center|center_horizontal" />
</TableRow>
This adapter:
public class CustomList extends ArrayAdapter<String> {
private final Activity context;
private final String[] title;
private final int[] colors;
private final Integer[] imageId;
public CustomList(Activity context,String[] title,int[] colors, Integer[] imageId) {
super(context, R.layout.list_single, title);
this.context = context;
this.title = title;
this.imageId = imageId;
this.colors=colors;
}
@override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.titleList);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(title[position]);
txtTitle.setTextColor(Color.parseColor("#FFffffff"));
txtTitle.setBackgroundColor(colors[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
and this is how I bind them:
final CustomList adapter = new
CustomList(MainActivity.this, title, colors, imageId);
list = (ListView) findViewById(R.id.list);
list.setAdapter(adapter);
My list has 12 items. I need to resize the list when user click one item. If the user choses an Item for the first time, the list has to change its width to 1/3 of its original size and to double the height of the selected item. If an item is already selected in the list and the user selects another the old item has to go back to the original height and the new selected one has to double its height without any width changes.
I want to animate all the resizing for nice looking.
This is the animation for changing width:
public class ShrinkList extends Animation
{
int fromWidth;
View view;
int def;
public ShrinkList(View view) {
this.view = view;
this.fromWidth = view.getWidth();
def=fromWidth/3;
}
@override
public boolean willChangeBounds() {
return true;
}
@override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newWidth;
newWidth = (int) ((def - fromWidth) * interpolatedTime + fromWidth);
if (newWidth > def/3) {
view.getLayoutParams().width = newWidth;
view.requestLayout();
}
else{
view.getLayoutParams().width = def/3;
view.requestLayout();
}
}
}
and this one is for changing height:
public class Grow extends Animation
{
int fromHeight;
View view;
int defaultHeight;
public Grow(View view,int height) {
this.view = view;
this.fromHeight = view.getHeight();
defaultHeight=height;
}
@override
public boolean willChangeBounds() {
return true;
}
@override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newHeight;
newHeight = (int) (fromHeight / (1 - interpolatedTime));
if (newHeight < defaultHeight * 2) {
view.getLayoutParams().height = newHeight;
view.requestLayout();
}
else{
view.getLayoutParams().height = defaultHeight*2;
view.requestLayout();
}
}
}
and I play them like that:
if(h==0) { //first time the user selects an item =>change width and height
Animation a = new ShrinkList(list);
a.setInterpolator(new LinearInterpolator());
a.setDuration(1000);
list.setAnimation(a);
list.startAnimation(a);
}
Animation a1 = new Grow(view,height); //change only height
a1.setInterpolator(new LinearInterpolator());
a1.setDuration(300);
view.setAnimation(a1);
view.startAnimation(a1);
My problem is that when the list changes its width, the animation is not smooth at all and it only changes the width, not the height too.
How can I make the animation smoother and make the two animations play at once?
I have tried scaling the list, but that scales all the list. basically I need only to resize the textView within ListView nd changing layoutParams does that.
I have tried to insert the code from Grow.java into ShrinkList.Java in orefer to play both animations once and it only played the one from Grow.java.
Jaws1992 said:
I have this custom listView:
<?xml version="1.0" encoding="utf-8"?>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/tableRow">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/ic_launcher"
android:contentDescription="@string/imdDesc" />
<TextView
android:id="@+id/titleList"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="25sp"
android:autoText="false"
android:gravity="center_vertical|center|center_horizontal" />
</TableRow>
This adapter:
public class CustomList extends ArrayAdapter<String> {
private final Activity context;
private final String[] title;
private final int[] colors;
private final Integer[] imageId;
public CustomList(Activity context,String[] title,int[] colors, Integer[] imageId) {
super(context, R.layout.list_single, title);
this.context = context;
this.title = title;
this.imageId = imageId;
this.colors=colors;
}
@override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.titleList);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(title[position]);
txtTitle.setTextColor(Color.parseColor("#FFffffff"));
txtTitle.setBackgroundColor(colors[position]);
imageView.setImageResource(imageId[position]);
return rowView;
}
}
and this is how I bind them:
final CustomList adapter = new
CustomList(MainActivity.this, title, colors, imageId);
list = (ListView) findViewById(R.id.list);
list.setAdapter(adapter);
My list has 12 items. I need to resize the list when user click one item. If the user choses an Item for the first time, the list has to change its width to 1/3 of its original size and to double the height of the selected item. If an item is already selected in the list and the user selects another the old item has to go back to the original height and the new selected one has to double its height without any width changes.
I want to animate all the resizing for nice looking.
This is the animation for changing width:
public class ShrinkList extends Animation
{
int fromWidth;
View view;
int def;
public ShrinkList(View view) {
this.view = view;
this.fromWidth = view.getWidth();
def=fromWidth/3;
}
@override
public boolean willChangeBounds() {
return true;
}
@override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newWidth;
newWidth = (int) ((def - fromWidth) * interpolatedTime + fromWidth);
if (newWidth > def/3) {
view.getLayoutParams().width = newWidth;
view.requestLayout();
}
else{
view.getLayoutParams().width = def/3;
view.requestLayout();
}
}
}
and this one is for changing height:
public class Grow extends Animation
{
int fromHeight;
View view;
int defaultHeight;
public Grow(View view,int height) {
this.view = view;
this.fromHeight = view.getHeight();
defaultHeight=height;
}
@override
public boolean willChangeBounds() {
return true;
}
@override
public void initialize(int width, int height, int parentWidth,
int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newHeight;
newHeight = (int) (fromHeight / (1 - interpolatedTime));
if (newHeight < defaultHeight * 2) {
view.getLayoutParams().height = newHeight;
view.requestLayout();
}
else{
view.getLayoutParams().height = defaultHeight*2;
view.requestLayout();
}
}
}
and I play them like that:
if(h==0) { //first time the user selects an item =>change width and height
Animation a = new ShrinkList(list);
a.setInterpolator(new LinearInterpolator());
a.setDuration(1000);
list.setAnimation(a);
list.startAnimation(a);
}
Animation a1 = new Grow(view,height); //change only height
a1.setInterpolator(new LinearInterpolator());
a1.setDuration(300);
view.setAnimation(a1);
view.startAnimation(a1);
My problem is that when the list changes its width, the animation is not smooth at all and it only changes the width, not the height too.
How can I make the animation smoother and make the two animations play at once?
I have tried scaling the list, but that scales all the list. basically I need only to resize the textView within ListView nd changing layoutParams does that.
I have tried to insert the code from Grow.java into ShrinkList.Java in orefer to play both animations once and it only played the one from Grow.java.
Click to expand...
Click to collapse
Do it like this
Code:
<RelativeLayout
android:id="@+id/myRelativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
[B]android:animateLayoutChanges="true"[/B]
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
[B]android:animateLayoutChanges="true"[/B]/>
</RelativeLayout>
Then you only need to change the width and height. And you don't have to worry about the animation
Rick Clephas said:
Do it like this
Code:
<RelativeLayout
android:id="@+id/myRelativeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
[B]android:animateLayoutChanges="true"[/B]
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
[B]android:animateLayoutChanges="true"[/B]/>
</RelativeLayout>
Then you only need to change the width and height. And you don't have to worry about the animation
Click to expand...
Click to collapse
I have tried what you suggested and the relative layout works great, but the list doesn't animate when it changes its witdh
Jaws1992 said:
I have tried what you suggested and the relative layout works great, but the list doesn't animate when it changes its witdh
Click to expand...
Click to collapse
You should add the animate layout changes to the first parent with match_parent as width
Sent from my SM-N9005 using XDA Premium 4 mobile app
Rick Clephas said:
You should add the animate layout changes to the first parent with match_parent as width
Sent from my SM-N9005 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
I created a relative layout as in your example and added animate layout changes to both the listview and that layout and changed the witth of the layout and it doesn't animate the list getting smaller. Only the next relative layout getting bigger after the list is small
Jaws1992 said:
I created a relative layout as in your example and added animate layout changes to both the listview and that layout and changed the witth of the layout and it doesn't animate the list getting smaller. Only the next relative layout getting bigger after the list is small
Click to expand...
Click to collapse
Okey. AnimateLayoutChanges applies to the chields. So if you want to animate the relative layout the listview is in. You need to add animateLayoutChanges to his parent
Sent from my SM-N9005 using XDA Premium 4 mobile app
Rick Clephas said:
Okey. AnimateLayoutChanges applies to the chields. So if you want to animate the relative layout the listview is in. You need to add animateLayoutChanges to his parent
Sent from my SM-N9005 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
I added animate layout changes to all the listView ancestors and it still doesn't animate the listView.
This is the java code for changing width. Maybe I doing something wrong here:
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) linLay.getLayoutParams();
if(sdkVersion>=Build.VERSION_CODES.HONEYCOMB) {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
lp.width =size.x/3;
}
else{
Display display = getWindowManager().getDefaultDisplay();
lp.width = display.getWidth()/3;
}
linLay.setLayoutParams(lp); //linLay is the listView parrent and is a relativeLayout
Jaws1992 said:
I added animate layout changes to all the listView ancestors and it still doesn't animate the listView.
This is the java code for changing width. Maybe I doing something wrong here:
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) linLay.getLayoutParams();
if(sdkVersion>=Build.VERSION_CODES.HONEYCOMB) {
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
lp.width =size.x/3;
}
else{
Display display = getWindowManager().getDefaultDisplay();
lp.width = display.getWidth()/3;
}
linLay.setLayoutParams(lp); //linLay is the listView parrent and is a relativeLayout
Click to expand...
Click to collapse
You have to set the animateLayoutChanges to the paretn of linLay
Sent from my SM-N9005 using XDA Premium 4 mobile app
Rick Clephas said:
You have to set the animateLayoutChanges to the paretn of linLay
Sent from my SM-N9005 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
Yes, I have already done that.As I said, I added animate layout changes to all of the listview ancestosr meaning linLay, parent of linLay, parent of parent of linLay and so on until the root of layouts, but the listView still doesn't animate
Okey could you post your xml
Sent from my SM-N9005 using XDA Premium 4 mobile app
Rick Clephas said:
Okey could you post your xml
Sent from my SM-N9005 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
<LinearLayout
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:animateLayoutChanges="true">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="70dp"
android:id="@+id/titleLayout"
android:visibility="visible"
android:animateLayoutChanges="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/imagew"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true" />
<LinearLayout
androidrientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/share"
android:layout_alignEnd="@+id/share"
android:layout_toRightOf="@+id/imagew"
android:layout_toEndOf="@+id/imagew"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/title"
android:textSize="40sp"
android:gravity="center|right"
android:layout_gravity="left"
android:textColor="#ffffffff" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/date"
android:textSize="30sp"
android:gravity="clip_horizontal|center|center_horizontal"
android:layout_gravity="right"
android:layout_marginLeft="20dp"
android:textColor="#ffffffff"
android:textStyle="italic" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/share"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:background="@drawable/share"
android:adjustViewBounds="false"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_alignParentEnd="false"
android:layout_centerVertical="true"
android:contentDescription="@string/share" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linLay"
android:animateLayoutChanges="true">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list"
android:headerDividersEnabled="false"
android:dividerHeight="0dp"
android:animateLayoutChanges="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:visibility="visible"
android:layout_toRightOf="@id/linLay"
android:id="@+id/contentLayout"
android:animateLayoutChanges="true">
<WebView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textSize="30sp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp"
android:visibility="visible"
android:textColor="#ffffffff"
android:typeface="normal"
android:gravity="left|fill" />
<LinearLayout
androidrientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:layout_alignParentEnd="false"
android:layout_alignParentBottom="true"
android:background="#ff647ab1"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/imageView"
android:background="@drawable/fb" />
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/FB"
android:id="@+id/fb"
android:textColor="#ffffffff"
android:textStyle="bold"
android:textSize="50sp" />
</LinearLayout>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
Jaws1992 said:
<LinearLayout
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:animateLayoutChanges="true">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="70dp"
android:id="@+id/titleLayout"
android:visibility="visible"
android:animateLayoutChanges="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/imagew"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true" />
<LinearLayout
androidrientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_alignRight="@+id/share"
android:layout_alignEnd="@+id/share"
android:layout_toRightOf="@+id/imagew"
android:layout_toEndOf="@+id/imagew"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/title"
android:textSize="40sp"
android:gravity="center|right"
android:layout_gravity="left"
android:textColor="#ffffffff" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/date"
android:textSize="30sp"
android:gravity="clip_horizontal|center|center_horizontal"
android:layout_gravity="right"
android:layout_marginLeft="20dp"
android:textColor="#ffffffff"
android:textStyle="italic" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/share"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:background="@drawable/share"
android:adjustViewBounds="false"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_alignParentEnd="false"
android:layout_centerVertical="true"
android:contentDescription="@string/share" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/linLay"
android:animateLayoutChanges="true">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list"
android:headerDividersEnabled="false"
android:dividerHeight="0dp"
android:animateLayoutChanges="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:visibility="visible"
android:layout_toRightOf="@id/linLay"
android:id="@+id/contentLayout"
android:animateLayoutChanges="true">
<WebView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:textSize="30sp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp"
android:visibility="visible"
android:textColor="#ffffffff"
android:typeface="normal"
android:gravity="left|fill" />
<LinearLayout
androidrientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:layout_alignParentEnd="false"
android:layout_alignParentBottom="true"
android:background="#ff647ab1"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:id="@+id/imageView"
android:background="@drawable/fb" />
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/FB"
android:id="@+id/fb"
android:textColor="#ffffffff"
android:textStyle="bold"
android:textSize="50sp" />
</LinearLayout>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
Click to expand...
Click to collapse
Does the width change?
Sent from my SM-N9005 using XDA Premium 4 mobile app
Rick Clephas said:
Does the width change?
Sent from my SM-N9005 using XDA Premium 4 mobile app
Click to expand...
Click to collapse
Yes. The width of changes, but it doesn't animate
Jaws1992 said:
Yes. The width of changes, but it doesn't animate
Click to expand...
Click to collapse
Okey I don't get it. It should work...
Sent from my SM-N9005 using XDA Premium 4 mobile app

[Q] ListView appearance changes

I have created an android program which contains listview. Emulator and my phone (Samsung Galaxy S) shows like;
-see First Attachment (1.png)
But when I open my program in Samsung Note 3, it shows like;
-see Second Attachment (2.png)
It likes 2 empty rows(empty but their colors dark blue) and 1 real list view item. 2 empty rows, 1 real item, 2 empty rows, 1 real item ....
I tried each of item in listview. I removed each one and it does not solve my problem. And some bigger screen phones have same issue. How can i solve it?
my xml:
Code:
<RelativeLayout
android:id="@+id/tabTT"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:id="@+id/tabTT_icon"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Team Tactics"
android:id="@+id/tabTT_main_text"
android:textSize="13sp"
android:textStyle="bold"
android:textColor="#800000"
android:visibility="invisible"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_main_second"
android:textSize="12sp"
android:textColor="#000000"
android:visibility="invisible"
android:layout_below="@id/tabTT_main_text"
android:layout_centerHorizontal="true"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tabTT_listView"
android:clickable="true"
android:layout_below="@id/tabTT_main_second"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_ImageView"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_name"
android:textSize="13sp"
android:textStyle="bold"
android:textColor="#000000"
android:layout_marginLeft="68dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_subName"
android:textSize="12sp"
android:layout_below="@id/tabTT_textView_name"
android:textColor="#000000"
android:layout_marginLeft="68dp"/>
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tabTT_ProgressBar"
android:layout_below="@id/tabTT_textView_subName"
android:layout_toRightOf="@id/tabTT_ImageView"
android:progressDrawable="@drawable/progress_bar"
android:visibility="invisible"
style="?android:attr/progressBarStyleHorizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_percentage"
android:layout_centerHorizontal="true"
android:layout_below="@id/tabTT_textView_subName"
android:textColor="#800000"/>
</RelativeLayout>
my adapter:
Code:
public static class TTAdapter extends ArrayAdapter<Achievement> {
public TTAdapter(Context context, ArrayList<Achievement> users) {
super(context, 0, users);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Achievement user = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_ach, parent, false);
}
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Achievement clicked = getItem(position);
if(clicked.progressFloatSecond!=-1){
Toast.makeText(getContext(), "Left: " + NumberFormat.getNumberInstance(Locale.US).format(clicked.progressFloatSecond - clicked.progressFloatFirst), Toast.LENGTH_SHORT).show();
}
else Toast.makeText(getContext(), "One-Time Mission!", Toast.LENGTH_SHORT).show();
}
});
TextView name = (TextView) convertView.findViewById(R.id.tabTT_textView_name);
TextView subName = (TextView) convertView.findViewById(R.id.tabTT_textView_subName);
ImageView imVi = (ImageView)convertView.findViewById(R.id.tabTT_ImageView);
ProgressBar progBar = (ProgressBar) convertView.findViewById(R.id.tabTT_ProgressBar);
TextView percentageFloat = (TextView) convertView.findViewById(R.id.tabTT_textView_percentage);
DecimalFormat df = new DecimalFormat("##.##");
name.setText(user.name);
subName.setText(user.subName);
imVi.setImageResource(user.picInt);
progBar.setVisibility(View.INVISIBLE);
percentageFloat.setVisibility(View.INVISIBLE);
if(user.progressFloatSecond!=-1){
progBar.setVisibility(View.VISIBLE);
progBar.setMax(user.progressFloatSecond);
progBar.setProgress(user.progressFloatFirst);
percentageFloat.setText(df.format(user.progressFloat) + " %");
percentageFloat.setVisibility(View.VISIBLE);
}
return convertView;
}
}
Maybe you can try the layout development tool to show the view border.
Open it in Settings->Developer options->Show layout bounds.
anilff said:
I have created an android program which contains listview. Emulator and my phone (Samsung Galaxy S) shows like;
-see First Attachment (1.png)
But when I open my program in Samsung Note 3, it shows like;
-see Second Attachment (2.png)
It likes 2 empty rows(empty but their colors dark blue) and 1 real list view item. 2 empty rows, 1 real item, 2 empty rows, 1 real item ....
I tried each of item in listview. I removed each one and it does not solve my problem. And some bigger screen phones have same issue. How can i solve it?
my xml:
Code:
<RelativeLayout
android:id="@+id/tabTT"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"
android:id="@+id/tabTT_icon"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Team Tactics"
android:id="@+id/tabTT_main_text"
android:textSize="13sp"
android:textStyle="bold"
android:textColor="#800000"
android:visibility="invisible"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_main_second"
android:textSize="12sp"
android:textColor="#000000"
android:visibility="invisible"
android:layout_below="@id/tabTT_main_text"
android:layout_centerHorizontal="true"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tabTT_listView"
android:clickable="true"
android:layout_below="@id/tabTT_main_second"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_ImageView"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_name"
android:textSize="13sp"
android:textStyle="bold"
android:textColor="#000000"
android:layout_marginLeft="68dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_subName"
android:textSize="12sp"
android:layout_below="@id/tabTT_textView_name"
android:textColor="#000000"
android:layout_marginLeft="68dp"/>
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tabTT_ProgressBar"
android:layout_below="@id/tabTT_textView_subName"
android:layout_toRightOf="@id/tabTT_ImageView"
android:progressDrawable="@drawable/progress_bar"
android:visibility="invisible"
style="?android:attr/progressBarStyleHorizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tabTT_textView_percentage"
android:layout_centerHorizontal="true"
android:layout_below="@id/tabTT_textView_subName"
android:textColor="#800000"/>
</RelativeLayout>
my adapter:
Code:
public static class TTAdapter extends ArrayAdapter<Achievement> {
public TTAdapter(Context context, ArrayList<Achievement> users) {
super(context, 0, users);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Achievement user = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item_ach, parent, false);
}
convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Achievement clicked = getItem(position);
if(clicked.progressFloatSecond!=-1){
Toast.makeText(getContext(), "Left: " + NumberFormat.getNumberInstance(Locale.US).format(clicked.progressFloatSecond - clicked.progressFloatFirst), Toast.LENGTH_SHORT).show();
}
else Toast.makeText(getContext(), "One-Time Mission!", Toast.LENGTH_SHORT).show();
}
});
TextView name = (TextView) convertView.findViewById(R.id.tabTT_textView_name);
TextView subName = (TextView) convertView.findViewById(R.id.tabTT_textView_subName);
ImageView imVi = (ImageView)convertView.findViewById(R.id.tabTT_ImageView);
ProgressBar progBar = (ProgressBar) convertView.findViewById(R.id.tabTT_ProgressBar);
TextView percentageFloat = (TextView) convertView.findViewById(R.id.tabTT_textView_percentage);
DecimalFormat df = new DecimalFormat("##.##");
name.setText(user.name);
subName.setText(user.subName);
imVi.setImageResource(user.picInt);
progBar.setVisibility(View.INVISIBLE);
percentageFloat.setVisibility(View.INVISIBLE);
if(user.progressFloatSecond!=-1){
progBar.setVisibility(View.VISIBLE);
progBar.setMax(user.progressFloatSecond);
progBar.setProgress(user.progressFloatFirst);
percentageFloat.setText(df.format(user.progressFloat) + " %");
percentageFloat.setVisibility(View.VISIBLE);
}
return convertView;
}
}
Click to expand...
Click to collapse

Text in a spinner changes height and width selecting another item

I wrote this code for an Android spinner:
Code:
<Spinner
android:id="@+id/lstCommunity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/community_string"
android:layout_alignLeft="@+id/txtName"
android:layout_below="@+id/txtName"
android:minHeight="0dp"
android:textSize="10sp"
android:background="@drawable/box" />
But the text in the spinner changes its height and width after selecting another item in the list.
So, initially it is a bit smaller than the height and width of the spinner, after selecting another item, it becomes really bigger than the spinner's size.
How should i change my code?
1) Creare spinnertext.xml in res/layout
For example:
Code:
xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android=
android:text="@+id/TextView01"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="#FFFFFFFF"
android:gravity="center"/>
2)Declare the spinner in the file main.xml (in res\layout), to manage its size :
Code:
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="32dip"
android:drawSelectorOnTop="true"
android:prompt="@string/spinner_prompt"
/>
3) Declare the spinner in the activity
Code:
Spinner s = (Spinner) findViewById(R.id.spinner);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.sensors, R.layout.spinnertext);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s.setAdapter(adapter);
//when an item is selected call the selectSensor method
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView parent, View view, int position, long id) {
selectSensor(parent.getItemAtPosition(position));
}
@Override
public void onNothingSelected(AdapterView arg0) {
}
});
Notice the change in the createfromresource function.

Categories

Resources