[Q] How can I change the layout for a widget in runtime? - Android Q&A, Help & Troubleshooting

Hi, I have a widget that I want to use as lockscreen as well ( since android 4.2+ allows it), so I need to change the layout when the widget is on the lock screen and when is on the regular screen, how can i do it? I tried to use the Intent ACTION_USER_PRESENT but my BroadcastReceiver never gets it. I have it defined in the manifest as well:
PHP:
<receiver
android:name="com.myApp.myApp.MyWidgetIntentReceiver"
android:exported="false"
android:label="widgetBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" >
</action>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/demo_widget_provider" />
</receiver>
public class MyWidgetIntentReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT){
Log.i("TICK", intent.getAction());
}
}
}
Is there any other way that I can check when the widget is in the lock screen or not? I tried this guide as well:
http://developer.android.com/guide/topics/appwidgets/index.html#lockscreen
But how do I check that every time that I lock/unlock the screen?
Thanks!
EDIT: I ended up using Intent.ACTION_USER_PRESENT to check when the screen is unlocked, Thanks!

Related

Reordering a List

Trying to reorder a list. I have a layout with up arrow image on left, textview in middle and down arrow on right. XML sets images to invisible.
On list item press, I turn the arrows to visible FOR THAT ITEM. Based on up or down, I swap the list item and call myAdapter.notifyDataSetChanged() in which I set both image arrows to invisible. Works just fine, except...
The client wants the arrows to "follow" the list item till a "Done" button is pressed.
I'm having trouble wrapping my head around how I get the arrows to be visible on list item pressed +/- 1...any ideas?
Tia,
Roots
P.S. The app has a database where I store these changes vs. the volatile nature of the list views
Rootstonian said:
Trying to reorder a list. I have a layout with up arrow image on left, textview in middle and down arrow on right. XML sets images to invisible.
On list item press, I turn the arrows to visible FOR THAT ITEM. Based on up or down, I swap the list item and call myAdapter.notifyDataSetChanged() in which I set both image arrows to invisible. Works just fine, except...
The client wants the arrows to "follow" the list item till a "Done" button is pressed.
I'm having trouble wrapping my head around how I get the arrows to be visible on list item pressed +/- 1...any ideas?
Tia,
Roots
P.S. The app has a database where I store these changes vs. the volatile nature of the list views
Click to expand...
Click to collapse
Hello,
I hope I have understood your problem correctly.
Keep an int named selectedIndex. When a list item is clicked, store the index of the clicked list item in selectedIndex. Then each time the up/down arrow is pressed you should swap the list item at selectedIndex with the item at selectedIndex - 1/ selectedIndex + 1 and do selectedIndex--/selectedIndex++ depending on which arrow was pressed. Then call
myAdapter.notifyDataSetChanged().
Then finally when the "Done" button is pressed, make your arrows invisible and store the changes in the database.
Please let me know if this was helpful to you
I do that and the ITEM is swapping ok, but the arrows aren't...See if I can explain it
<upArrow> This is LiistView Row1 <downArrow>
This is ListView Row 2
If I press the downArrow, I get:
This is ListView Row 2
This is LiistView Row1
....
<upArrow> This is ListView Row 14 <downArrow>
For some reason, the arrows are at like a "random" position. I need the arrows to follow the item...like:
<upArrow> This is ListView Row 2 <downArrow>
This is LiistView Row1
Have you made a ListLayout XML that defines each row of your list to have a layout that looks something like this?
Image Text Image
You could simply make the arrow images visible for the list row which is selected and invisible for those which aren't. That way you don't have to worry about changing the positions of the images. It should work but I guess there would be a better way to do it rather than making so many ImageViews.
Can you please please post your ListLayout XML if you have already defined it? Also please explain what you do to change the position of the arrow images when they are clicked.
Custom Listview; I don't have code to "change the position", that's the TOPIC of my thread! ROFL
<?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="?android:attr/listPreferredItemHeight"
android:id="@+id/layout">
<ImageView android:id="@+id/up" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:src="@drawable/up"
android:gravity="left" android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
androidnClick="onClick"
android:visibility="invisible"/>
<TextView android:id="@+id/toptext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20dip"
android:textStyle="bold"
android:layout_toRightOf="@+id/up" />
<TextView android:id="@+id/bottomtext" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="18dip" android:layout_below="@+id/toptext"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@+id/up" />
<ImageView android:id="@+id/down" android:layout_width="wrap_content"
android:layout_height="30dip" android:src="@drawable/down"
android:gravity="right" android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
androidnClick="onClick"
android:visibility="invisible"/>
</RelativeLayout>
// Show arrows onClick
@Override
public void onItemClick(AdapterView<?> adapter, View v, int pos, long id) {
ImageView u = (ImageView) v.findViewById(R.id.up);
ImageView d = (ImageView) v.findViewById(R.id.down);
u.setVisibility(View.VISIBLE);
d.setVisibility(View.VISIBLE);
}
});
Click to expand...
Click to collapse
And what do you do when the arrow is clicked?
EDIT:
Can you please show the code for that too?
Not going to post actual code, but rest assured, it works. It's just a simple swap of list item, like:
// This is an "up" arrow click
temp = myList.get(pos); //where pos is row of item clicked
myList.set(pos - 1, myList.get(pos));
myList.set(pos, temp)
This works fine..tested it 100 times In my custom ArrayAdapter, if I set the up and down arrows to invisible, it works fine. Client wants the arrows to follow the item, in other words, swap the arrows too. This is the point I can't quite wrap my head around LOL
Have you tried using the ListView.getChildAt(iint) method to access the lists' rows' image views and then set them to their proper visibility in the method where you swap the items?
EDIT:
Sorry if i'm unable to help =/
Don't worry about it Like I've been saying, I just can't wrap my head around it. LOL
I'm working with setting the "tag" of each row to it's position in the list and then use "findViewWithTag", but still not having any luck.
I'm sure it's one of those "oh, duh moments" you get once you figure it out.
Thanks for trying...you did get me thinking about some new ideas and that's always a good thing!
Roots
Rootstonian said:
I do that and the ITEM is swapping ok, but the arrows aren't...See if I can explain it
<upArrow> This is LiistView Row1 <downArrow>
This is ListView Row 2
If I press the downArrow, I get:
This is ListView Row 2
This is LiistView Row1
....
<upArrow> This is ListView Row 14 <downArrow>
For some reason, the arrows are at like a "random" position. I need the arrows to follow the item...like:
<upArrow> This is ListView Row 2 <downArrow>
This is LiistView Row1
Click to expand...
Click to collapse
I assume you're using a list adapter right? Why not include the arrow status as a class member of whatever class it is that you are using as the base for the list adapter?
Yes Gene and I'm not sure what you mean. See if I can code a skeleton of what I have.
Code:
public class ReorderList extends ListActivity {
// standard on create stuff
// some code for app
// setup list adapter with my xml file
lv.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int pos, long id) {
ImageView u = (ImageView) v.findViewById(R.id.up);
ImageView d = (ImageView) v.findViewById(R.id.down);
u.setVisibility(View.VISIBLE);
d.setVisibility(View.VISIBLE);
}
});
} // end ReorderList class
private class mAdapter extends ArrayAdapter<String> {
public mAdapter(Context context, int textViewResourceId,ArrayList<String>editList) {
super(context, textViewResourceId, editList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// bunch of stuff in here, but at end, I set up and down arrows to invisible
// this works perfect, except the arrows are gone and you have to click
// on the item again to move it; client doesn't like that
// If I don't set to invisible, row 12 has the arrows
}
public void onClick(View v) {
// this just swaps items based on up or down arrow press
// works fine
}
OK, I see. You're just using "String" as the base to initialize the template. Instead, create a new class:
Code:
class MyListType{
String str;
Boolean bIsArrowEnabled;
}
Now initialize your template with MyListType:
Code:
private class mAdapter extends ArrayAdapter<MyListType> {
public mAdapter(Context context, int textViewResourceId,ArrayList<MyListType>editList) {
super(context, textViewResourceId, editList);
}
You'll have to work some other issues out using this approach, but no instead of just a string in your editList, you got a string and a boolean. The boolean is part of the class so no matter where editList ends up in the list, the boolean is part of it.
Still having problems with this. Here's a dumb question LOL...
When I hit one of my arrows, I swap the list items and call notifyDataSetChanged(), which calls the @Overrided public View getView(.....). At the end of this method, there is a return....where in the code is this "sitting" on the return? It's not back to onCreate or onResume...I toasted them and no message. But the onItemClick() listener is "active" and working in onCreate().
Gotta love Android programming
//********************** Nevemind, I got it...i think
It involved setting the tagId for each row in the list view. Based on which arrow is pressed, I set a boolean value to true. If up, set images visible to tagId - 1 or tagId + 1 for down
Questions or Problems Should Not Be Posted in the Development Forum
Please Post in the Correct Forums
Moving to Q&A

[Q] Getting Custom Lockscreen to load on boot

Edit: Just realized I posted this in the wrong forum, mods please feel free to move it to the General forum...my bad.
Hey guys,
So maybe somewhere here has an answer for this problem I'm having. I downloaded a custom lockscreen app (Simply Lockscreen), and it works great except for one major flaw: Upon booting/rebooting the phone, the lockscreen defaults to the system HTC Sense lockscreen. Now, as soon as I launch the app from the app drawer, the Sense lockscreen goes away and Simply Lockscreen loads up evey time just fine. But whenever I turn off the phone and reboot, the Sense lockscreen returns and I can't use the custom lockscreen until I manually launch it from the App drawer.
I downloaded System Tuner Pro and tried a few different things, including making sure Simply Lockscreen was marked as a "startup app" (which it was), disabling HTC Lockscreen as a startup app, disabling Rosie as a startup app, and finally (after none of the previous actions helped), uninstalling the HTC Lockscreen system app entirely. Unfortunately, after I did this, rather than Simpy Lockscreen popping up after boot, all I got was the Android default lockscreen (which I didn't even know existed on my phone but was apparently buried under Sense).
My question is, is there anything else I can do that may get my Simply Lockscreen custom lockscreen app to load on boot as the default lockscreen? Or is this 'simply' an app-related issue that only the developer can solve? I'm beginning to think it is, as I've downloaded and used other custom lockscreen apps in the past which have loaded up fine upon reboot (namely Go Locker). The only reason I'd like to stay with Simply Lockscreen is because of the really cool Honeycomb theme it has and the sheer number of features it allows you to enable on the lockscreen.
Before you ask, I'm running XBoarder's BulletProof v2.5 with Faux's latest kernel.
Thanks in advance for any advice!
Issue resolved. Found the bit of code i needed HERE
in AndroidManifest.xml (application-part):
<receiver android:enabled="true" android:name=".BootUpReceiver"
androidermission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
[..]
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
[..]
public class BootUpReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
Click to expand...
Click to collapse
Bling_Diggity said:
Edit: Just realized I posted this in the wrong forum, mods please feel free to move it to the General forum...my bad.
Click to expand...
Click to collapse
Done.
are you letting your device load completely before using it? i say that because the default lockscreen will always show up on boot until the replacement loads. i use mi locker and it doesnt show the replacement screen immediately, but wait a minute or so and it should load

[Q] Two Questions About App Developing

Hi,
I started developing an app for android (ofcourse...) and I'd like to know how can I use the ICS buttons etc. on GingerBread app (2.3.3).
I have everything set up (Eclipse, SDK, ADB...) and currently coding, I watched a few video tutorials and text guides but none of them explained how to make a button (or anything else) to do something usefull (like quitting the app, going to another view, open or run something...)
I'd like some1 (or more ) to help me a bit and not to tell me "search on google" as I already did that...
It's the first time im developing something, not just android app, so...
If you load the sdk examples in eclipse you can see how to create different buttons, checkboxes, layouts, lists and many other things.
To create a button:
In your layout xml create a button
Code:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1" >
</Button>
In your activity source code
Code:
package com.uncorrupted.android.buttontest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ButtonActivity extends Activity {
private Button button1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(onButton1Select);
}
private OnClickListener onButton1Select = new OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(ButtonActivity.this, NEWACTIVITY.class);
MultabootActivity.this.startActivity(myIntent);
}
};
};
NEWACTIVITY would be the activity you want the app to perform after pressing the button.
HERE IS SOME OTHER EXAMPLE:
http://www.vogella.com/articles/Android/article.html
To create a menu that pops up when they hit menu:
http://developer.android.com/guide/topics/ui/menus.html
unCoRrUpTeD said:
To create a button:
In your layout xml create a button
Code:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1" >
</Button>
In your activity source code
Code:
package com.uncorrupted.android.buttontest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ButtonActivity extends Activity {
private Button button1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
rom1btn = (Button)findViewById(R.id.button1);
rom1btn.setOnClickListener(onButton1Select);
}
private OnClickListener onButton1Select = new OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(ButtonActivity.this, NEWACTIVITY.class);
MultabootActivity.this.startActivity(myIntent);
}
};
};
NEWACTIVITY would be the activity you want the app to perform after pressing the button.
HERE IS SOME OTHER EXAMPLE:
http://www.vogella.com/articles/Android/article.html
To create a menu that pops up when they hit menu:
http://developer.android.com/guide/topics/ui/menus.html
Click to expand...
Click to collapse
great, thanks!
you know how to import icons and ui stuff from ICS to GB app? i downloaded from here: http://developer.android.com/design/index.html but i have no idea how to use it! xD
noamsch6 said:
great, thanks!
you know how to import icons and ui stuff from ICS to GB app? i downloaded from here: http://developer.android.com/design/index.html but i have no idea how to use it! xD
Click to expand...
Click to collapse
No, there is no way to use ics ui and stuff on gb
Sent from my SGH-I777 using xda premium
Waddle said:
No, there is no way to use ics ui and stuff on gb
Sent from my SGH-I777 using xda premium
Click to expand...
Click to collapse
What about SetCPU ? I can run it on gingerbread and it has UI like ics
Wouldn't you just have to include the png's in the resource file? Then reference them when creating the button?
Sent from my PC36100 using xda premium

JAVA class ImageButton animation on click before next activity

Greetings, I hope someone can help. I know the solution is "simple" - as in, a few words or lines to change. I just cannot figure it out.
I have an app. It's on the Play Store and fully functional, and so now I am trying to improve the UI. I am having trouble with MainActivity.java for a specific goal.
OBJECTIVE: an ImageButton on click animation and then next activity launches:
(1) User clicks image button
(2) Image button is animated (according to an anim XML file)
(3) THEN next activity is launched after button shows the animation
What I can already do:
I can make next activity just launch, no animation (code below shows this lack of animation)
I can make the image animate on click, but not launch next activity.
I can make it do both at the same time (animation starts but then is quickly interrupted by next activity)
MainActivity.java
Code:
/** Help Page Activity No Animation*/
public void gotohelp(View view) {
Intent intent = new Intent(this, HelpPageActivity.class);
startActivity(intent);
}
anim_rotate.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="500"
android:startOffset="0"
android:repeatCount="1"
android:repeatMode="reverse" />
</set>
activity_main.xml:
Code:
<ImageButton
android:autoLink="web"
android:linksClickable="true"
android:id="@id/questionButton"
android:background="#00000000"
android:src="@drawable/question"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:onClick="gotohelp"
android:contentDescription="@string/question" />
MainActivity.Java whole file is here: http://pastebin.com/4HztRmK3. Relevant code starts at line 196.
Thanks X 1000 for any help. If I pull out any more hair I will need to join a club.
I know I might have to go to StackOverflow with this but I love my XDA peeps. I'm bumping this just one time, because it has almost no views...
Anybody happen to know what I'm missing here?

QSlide for any app?

Is it possible to make any app a QSlide app either with or without a rooted device?
Good question. Would like to know this too. Same with dual window. Not all apps can be used with that either. Good thing itll be a native feature with android n.
TheJOJ said:
Is it possible to make any app a QSlide app either with or without a rooted device?
Click to expand...
Click to collapse
Needs something like this added to its manifest
Permission to overdraw added to it
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
It needs to be made selectable within qslide
<application android:theme="null" android:label="App name" android:icon="app's data path to its icon.png"
Then made viewable in the launcher
<uses-library android:name="com.lge.app.floating" android:required="false" />
<activity android:label="App name" android:name="App name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
No simple drag n drop method can add apps to qslide but possibly a batch editor could be made one day to pull it off on the fly...one day.

Categories

Resources