| |||||||
Das Thema "Notizapp mit Widget, formatiertem Text, eingefärbten Buttons, Speichern&Ausgabe Text" befindet sich unter Android Codeschnipsel auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Android Experte Registriert seit: 24.11.2009
Beiträge: 748
Abgegebene Danke: 402
Erhielt 156 Danke für 77 Beiträge
| habe mich als Newbie mal 5 Tage am Stück hingesetzt und mein Gesellenstück zusammengeschustert. Ich werde hier die nächsten Tage [ist nun geschehen Anm.Red.] noch ausführlicher auf die einzelnen Besonderheiten des Programms eingehen. Habe die einzelnen Stücke alle aus diversen Quellen im Internet zusammengesetzt, also Dank an alle die bisher auch Tutorials und Codes veröffentlich haben. Hoffe, dass auch der ein oder andere an der App gefallen findet. Ich habe sie mit dem Hintergrund programmiert, weil ich eine Notiz App vermisst habe, die einfach nur von mir Geschriebenes rein als Text auf dem Desktop anzeigt. Die .apk wurde für API Level 7, sprich 2.1 programmiert. Müsste als ganzes aber auch auf API Level 5 laufen. Ob dazu jedoch ein Neukompilieren und Ändern des Manifests nötig ist weiß ich nicht. Es steht jedem frei das Ding zu verändern und damit zu machen was ihm beliebt. Ich habe auch vor es mal weiterzuentwickeln, so dass in einem Feld einfach Kontakte hinzugefügt werden können (z.B. auch aus dem Adressbuch) die dann unter muss "muss zurückgerufen bzw. angemailt werden). Aber das ist noch Zukunftsmusik. Ich muss jetzt erst einmal liegengelassenes erledigen... Anleitung zur Benutzung des Widgets: Das Widget startet mit einem Kästchen Höhe und vier Kästchen Breite unsichtbar auf dem Desktop. Zum Starten dann an die Stelle klicken, an die das Widget gepflanzt wurde und dann im erscheinendem Fenster seinen Text eingeben. Kleiner Tipp für die hardcore transparenten unter euch, es gibt auch transparente Schrift zur Auswahl, d.h. man kann auch nen Titel benutzen der nicht auf dem Desktop angezeigt wird (die "unsichtbare Widget" Warnung bleibt dann aber [fälschlicherweise ] aus).Gruß Moppel P.s.: Man kann über Menü die Widgetschrift anpassen Codes: Ich geh einfach mal meinen Code durch und klaub mir das ein oder andere raus. Vieles ist sicher trivial, aber ich hätte mich als Einsteiger drüber gefreut. Für die größeren Zusammenhänge empfiehlt es sich, einen Blick in den Code zu werfen: Zeigt ne Toast-Messege an. Tauch ne Fehlermeldung auf, muss vermutlich noch was importiert werden: Code: Toast.makeText(context, "Achtung, durchsichtiges Notiz-Widget vorhanden...", Toast.LENGTH_SHORT).show(); Code: RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); remoteViews.setOnClickPendingIntent(R.id.button_two, configPendingIntent); remoteViews.setTextViewText(R.id.button_two, spannedText); remoteViews.setTextColor(R.id.button_two, textColor); Code: String text = ClickOneActivity.loadTitlePref(context, appWidgetId); Code: String font = "Hallo, ich werde gleich formatiert";
SpannableString spannedText = new SpannableString(text);
spannedText.setSpan(new StyleSpan(Typface.BOLT), 0, spannedText.length(), 0);
spannedText.setSpan(new TypefaceSpan("monospace"), 0, spannedText.length(), 0); Code: String html = "Alles löschen" + "<br />" + "<small>" + "(Gedrückt halten)" + "</small>"; Button deleteall = (Button) findViewById(R.id.deleteall); deleteall.setText(Html.fromHtml(html), TextView.BufferType.SPANNABLE); Code: Intent configIntent = new Intent(context, ClickOneActivity.class );
configIntent.setAction( ACTION_WIDGET_CONFIGURE );
configIntent.putExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId );
Uri data = Uri.withAppendedPath(Uri.parse("ButtonWidget://widget/id/#"+appWidgetId), String.valueOf(appWidgetId));
configIntent.setData(data);
PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
remoteViews.setOnClickPendingIntent(R.id.button_two, configPendingIntent); Code: @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
{
final int N = appWidgetIds.length;
for (int i=0; i<N; i++)
{
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
} Code: <?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<solid
android:color="@drawable/green"/>
<corners
android:radius="5dp" />
<padding
android:left="5dp"
android:top="10dp"
android:right="5dp"
android:bottom="10dp" />
</shape>
</item>
<item
android:state_pressed="false">
<shape>
<solid
android:color="@drawable/red"/>
<corners
android:radius="5dp" />
<padding
android:left="5dp"
android:top="10dp"
android:right="5dp"
android:bottom="10dp" />
</shape>
</item>
</selector> Transparenz: Code: Drawable d; d= findViewById(R.id.confirm).getBackground(); d.setAlpha(200); Code: PorterDuffColorFilter filter; Drawable d; d= findViewById(R.id.deleteall).getBackground(); filter = new PorterDuffColorFilter(Color.argb(100, 255, 0, 0), PorterDuff.Mode.SRC_ATOP); d.setColorFilter(filter); Code: Button confirmButton = (Button) findViewById(R.id.confirm); confirmButton.setOnClickListener(mConfirm); confirmButton.setOnTouchListener(mConfirmOnTouch); Code: private OnTouchListener mConfirmOnTouch = new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
Drawable d = findViewById(R.id.confirm).getBackground();
findViewById(R.id.confirm).invalidateDrawable(d);
d.clearColorFilter();
}
else
{
setButtonFilter();
}
return false;
}
}; Text und Zahlen speicher ich in der Preferenceclasse ab. Das ist mehr als einfach. Zum speichern: Code: SharedPreferences.Editor prefs = context.getSharedPreferences("Einstellungen", 0).edit();
prefs.putString("title" + appWidgetId, text);
prefs.commit(); Code: Zum laden des Textes, bzw. ints:
SharedPreferences prefs = context.getSharedPreferences("Einstellungen", 0);
String font = prefs.getString("font" + appWidgetId, "serif"); Code: private void dialogStyle()
{
final CharSequence[] items = {"Fett", "Fett & Kursiv", "Kursiv", "Normal"};
DialogInterface.OnClickListener mOnClick = new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int item)
{
final Context context = ClickOneActivity.this;
SharedPreferences.Editor prefs = context.getSharedPreferences("Einstellungen", 0).edit();
switch (item)
{
case 0: prefs.putInt("style" + mAppWidgetId, Typeface.BOLD); break;
case 1: prefs.putInt("style" + mAppWidgetId, Typeface.BOLD_ITALIC); break;
case 2: prefs.putInt("style" + mAppWidgetId, Typeface.ITALIC); break;
case 3: prefs.putInt("style" + mAppWidgetId, Typeface.NORMAL); break;
}
prefs.commit();
Toast.makeText(context, "\"" + items[item] + "\" gewählt", Toast.LENGTH_SHORT).show();
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Wähle einen Widgetschriftstyle:");
builder.setItems(items, mOnClick);
AlertDialog alert = builder.create();
alert.show();
} Code: SharedPreferences prefs = context.getSharedPreferences("Einstellungen", 0);
String font = prefs.getString("font" + appWidgetId, "serif"); Code: @Override
public void onDeleted(Context context, int[] appWidgetIds)
{
Toast.makeText(context, "Deleting Widget...", Toast.LENGTH_SHORT).show();
// When the user deletes the widget, delete the preference associated with it.
final int N = appWidgetIds.length;
for (int i=0; i<N; i++)
{
ClickOneActivity.deleteTitleAndBodyPref(context, appWidgetIds[i]);
}
} android:configChanges="orientation"> Dann wird beim Screenwechseln nicht onPause aufgerufen und ich kann dort in Ruhe mein finish() reinschreiben: Code: @Override
protected void onPause()
{
super.onPause();
final Context context = ClickOneActivity.this;
saveTitlePref( context, mAppWidgetId, mTitleText.getText().toString());
saveBodyPref( context, mAppWidgetId, mBodyText.getText().toString());
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ButtonWidget.updateAppWidget(context, appWidgetManager, mAppWidgetId);
finish();
} Vollständigkeithalber noch wie ich das Optionsmenü aufrufe: public boolean onCreateOptionsMenu(Menu menu) Code: {
super.onCreateOptionsMenu(menu);
MenuInflater mi =
new MenuInflater(getApplication());
mi.inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.schriftfarben:
dialogSchriftfarben();
return true;
case R.id.schriftstyle:
dialogStyle();
return true;
case R.id.schriftfont:
dialogFont();
return true;
}
return super.onContextItemSelected(item);
} Code: <?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/schriftfarben"
android:title="Schriftfarbe"
/>
<item
android:id="@+id/schriftstyle"
android:title="Schriftstyle"/>
/>
<item
android:id="@+id/schriftfont"
android:title="Schriftfont"/>
/>
</menu> Code: <activity android:name=".ClickOneActivity"
android:theme="@style/Theme.Wallpaper"
android:configChanges="orientation">
<intent-filter>
<action android:name="de.thesmile.android.widget.buttons.ButtonWidget.ACTION_WIDGET_CONFIGURE"/>
</intent-filter>
</activity> Code: <resources>
<!-- Base application theme is the default theme. -->
<style name="Theme" parent="android:Theme">
</style>
<style name="Theme.Black">
<item name="android:windowBackground">@drawable/screen_background_black</item>
</style>
<style name="Theme.Wallpaper" parent="android:style/Theme.Wallpaper">
<item name="android:colorForeground">#fff</item>
</style>
<style name="Theme.Translucent" parent="android:style/Theme.Translucent">
<item name="android:windowBackground">@drawable/translucent_background</item>
<item name="android:windowNoTitle">true</item>
<item name="android:colorForeground">#fff</item>
</style>
<style name="Theme.Transparent">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
<item name="android:windowBackground">@drawable/transparent_background</item>
<item name="android:windowNoTitle">true</item>
<item name="android:colorForeground">#fff</item>
</style>
<style name="TextAppearance.Theme.PlainText" parent="android:TextAppearance.Theme">
<item name="android:textStyle">normal</item>
</style>
</resources> ![]() Die Titel Leiste in der Activity bekomme ich weg mit: Code: @Override
protected void onCreate(Bundle icicle)
{
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
... - Wenn ich bei Details ins Textfeld nur eine E-Mailadresse reinschreibe und die nach Wiederaufruf der Acktivity blau markiert wird ist es nahezu ein Ding der Unmöglichkeit irgendwie in das Textfeld zu klicken um Text hinzuzufügen. Der Link wird immer magisch angeklickt. - Nach löschen aller Widgets vom Homescreen kann je nach Fall noch in der History eine Activity erscheinen. Bei Aufruf dieser lässt sich wieder Text eingeben und speichern, obwohl das dazugehörige Widget weg ist. Gibt es ne Möglichkeit eine App aus der History rauszunehmen? !Achtung! Es kann zum Verlust/Absturz der Notiz kommen kann, wenn bei "Titel" eine lange Nummer oder E-Mailadresse eingegeben wird. So war es bei mir zumindest unter Home++. Ich vermute, dass es damit zusammenhängt, dass ich für das Textfeld ebenso wie beim Detailtextfeld die automatische Telefonnummern- und Emailadressenerkennung aktiviert habe. Warum das beim einen Feld funktioniert und beim anderen nicht ist mir dabei unklar. Hoffe, dass ihr nicht schon vorher die böse Erfahrung gemacht haben... . Wenn es stört bitte bei euch dann selber im Quellcode korrigieren und Neukompilieren Geändert von moppelg (26.09.2010 um 14:44 Uhr) |
| | |
| Folgende Benutzer bedanken sich bei moppelg für diesen Beitrag: |
| | #2 (permalink) |
| Android Guru Modell: Galaxy Nexus, Galaxy Note, Galaxy Tab 10.1N, G-Slate Registriert seit: 27.02.2009
Beiträge: 3.230
Abgegebene Danke: 206
Erhielt 1.216 Danke für 308 Beiträge
|
Sehr nett! Danke für das gute Beispiel!
__________________ Zitat auf Engadget.com: They can crack military databases, but they still use paper... Android-Entwicklung und Beratung: Sera-Apps.de Twitter: SeraAndroid |
| | |
| Folgende Benutzer bedanken sich bei SeraphimSerapis für diesen Beitrag: | Chrischi2809 (01.06.2010), moppelg (25.05.2010) |
| | #3 (permalink) |
| Android-Hilfe.de Mitglied Modell: HTC Desire Registriert seit: 20.05.2009
Beiträge: 61
Abgegebene Danke: 4
Erhielt 2 Danke für 2 Beiträge
|
Habe es auf meinem HTC Desire installiert. Wenn ich das Widget auf dem Destkop anlege, ist das widget durchsichtig. Auf dem desktop ist nichts zu sehen... klicke einfach ins leere bis es sich öffnet...
__________________ Iphone ist eine Modeerscheinung. Android eine Lebenseinstellung ! HTC Desire Android 2.2 Vodafone |
| | |
| | #4 (permalink) |
| Android Experte Registriert seit: 24.11.2009
Beiträge: 748
Abgegebene Danke: 402
Erhielt 156 Danke für 77 Beiträge
|
Hey Chrischi, danke, dass du es nochmal ansprichst. War etwas unklar dokumentiert von mir. Wie Chrischi bereits sagte startet das Widget mit einem Kästchen Höhe und vier Kästchen Breite unsichtbar auf dem Homescreen. Zum Starten dann an die Stelle klicken, an die das Widget gepflanzt wurde und seinen Text eingeben. Es sind auch mehrere Widgets möglich. Kleiner Tipp für die hardcore transparenten unter euch, es gibt auch transparente Schrift zur Auswahl, d.h. man kann auch nen Titel benutzen der nicht auf dem Desktop angezeigt wird (die "unsichtbare Widget" Warnung bleibt dann aber [fälschlicherweise ] aus).
Geändert von moppelg (02.06.2010 um 22:13 Uhr) |
| | |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied Modell: HTC Desire Registriert seit: 08.04.2010
Beiträge: 80
Abgegebene Danke: 16
Erhielt 4 Danke für 4 Beiträge
|
Nice genau sowas hab ich gesucht ![]() Sach mal ist es noch möglich eine Funktion für Fotos ein zu fügen? Sprich dass man zu seiner Notiz ein Foto machen kann und es klein auf der rechten oder linken Seite angezeigt wird ![]() Und wenn man auf das Bild drückt, dass es in einem "popup" in groß angezeigt wird. |
| | |
| | #6 (permalink) |
| Android Experte Registriert seit: 24.11.2009
Beiträge: 748
Abgegebene Danke: 402
Erhielt 156 Danke für 77 Beiträge
|
Hi Mischor, danke für dein Interesse, aber leider weiß ich nicht wann ich mich mal wieder ransetze um mit Android weiterzuprogrammieren. !Achtung! Möchte aber noch meine Antwort nutzen um eine kleine Warnung rauszugeben, dass es zum Verlust/Absturz der Notiz kommen kann, wenn bei "Titel" eine lange Nummer oder E-Mailadresse eingegeben wird. So war es bei mir zumindest unter Home++. Ich vermute, dass es damit zusammenhängt, dass ich für das Textfeld ebenso wie beim Detailtextfeld die automatische Telefonnummern- und Emailadressenerkennung aktiviert habe. Warum das beim einen Feld funktioniert und beim anderen nicht ist mir dabei unklar. Hoffe, dass ihr nicht schon vorher die böse Erfahrung gemacht haben... |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Suche App: Text-Editor mit Syntax-Highlighting | Electron | Sonstige Apps & Widgets | 3 | 21.10.2011 22:40 |
| Original HTC Tastatur mit DEUTSCHEM speech to text ! | Godfather | Root / Hacking / Modding für HTC Desire | 42 | 23.05.2010 03:23 |
| Tastaturentäuschung: Gibt es eine (bessere) mit ä,ö,ü u. wie editiere ich Text? | micmax | Samsung Galaxy Spica (I5700) Forum | 5 | 11.05.2010 22:21 |
| HTC Keyboard mit Voice-to-Text verfügbar | oclock | Root / Hacking / Modding für HTC Desire | 3 | 17.04.2010 21:17 |
| App: WebSMS, mehrere Konten und verknüpfen mit Text Easy | Bausparfuchs | Sonstige Apps & Widgets | 3 | 08.01.2010 17:53 |