pbp Δημοσ. 6 Οκτωβρίου 2013 Δημοσ. 6 Οκτωβρίου 2013 Γεια σας παιδιά, μηπώς μπορεί να μου πει κανείς πως μπορω να βάλω μια εικόνα σε ένα textView τερμα πάνω δεξια σαν Background? Επίσης με ποια μέθοδο μπορώ να μεταβάλλω αυτήν την είκόνα μέσα από το Activity που βρίσκεται το TextView? Ευχαριστώ.
Directx Δημοσ. 6 Οκτωβρίου 2013 Δημοσ. 6 Οκτωβρίου 2013 Ένας απλός τρόπος για να ορίσεις ένα συνοδευτικό drawable (σε ένα από τα τέσσερα σημεία του ορίζοντα) στο textView component είναι μέσω της διαδικασίας setCompoundDrawablesWithIntrinsicBounds (και συμβατών) ή των ανάλογων properties (πχ. drawableLeft, drawableRight property κλπ). Για πιο ειδικευμένα οπτικά αποτελέσματα ρίξε μια ματιά στο background property (ή setBackgroundResource) του component και ίσως στα properties των διαστάσεων του. Καλή συνέχεια.
pbp Δημοσ. 7 Οκτωβρίου 2013 Μέλος Δημοσ. 7 Οκτωβρίου 2013 Ένας απλός τρόπος για να ορίσεις ένα συνοδευτικό drawable (σε ένα από τα τέσσερα σημεία του ορίζοντα) στο textView component είναι μέσω της διαδικασίας setCompoundDrawablesWithIntrinsicBounds (και συμβατών) ή των ανάλογων properties (πχ. drawableLeft, drawableRight property κλπ). Για πιο ειδικευμένα οπτικά αποτελέσματα ρίξε μια ματιά στο background property (ή setBackgroundResource) του component και ίσως στα properties των διαστάσεων του. Καλή συνέχεια. Thank you! πολύ καλό! μήπως γίνεται με τον πρώτο τρόπο να επιλέξω πάνω και δεξιά μαζί? έτσι όπως το κατάλαβα εγώ μπορώ ή σκέτο δεξιά ή σκέτο πάνω. Ο συνδιασμός τους είναι δυνατόν να επιτευχθεί με τον εύκολο τρόπο?
Directx Δημοσ. 7 Οκτωβρίου 2013 Δημοσ. 7 Οκτωβρίου 2013 (επεξεργασμένο) Ο συνδιασμός τους είναι δυνατόν να επιτευχθεί με τον εύκολο τρόπο?Όπως προείπα η δυνατότητα στοίχισης του drawable στην διαδικασία setCompoundDrawablesWithIntrinsicBounds περιορίζεται σε μια εκ των 4 κατευθύνσεων. --EDIT/--UPDATE: Εναλλακτικά θα μπορούσες να επέμβεις στον τρόπο σχεδίασης (διαδικασία onDraw) του TextView ώστε να σχεδιάζεις μόνος σου πάνω και αριστερά την εικόνα (drawable) που θέλεις εντός του καμβά που παρέχει το κοντρόλ. Ακολουθεί ένα γρήγορο παράδειγμα στο οποίο κατασκευάζω ένα νέο TextView component, ονόματι MyTextView το οποίο μεγαλώνει τον ωφέλιμο χώρο του component μέσω padding τόσο όσο χρειάζεται (πχ. 24dp, 24dp [εξαρτάται από τις διαστάσεις του drawable που θα σχεδιάσουμε]) ώστε και το κείμενο του TextView να σχεδιάζεται αυτόματα από το πατρογονικό component σωστά και εμείς να σχεδιάζουμε ύστερα από αυτό πάνω αριστερά (0, 0 | Χ, Υ) το drawable (R.drawable.logo2) που επιθυμούμε ως bitmap (βλ. bmpLogo). Οι τιμές που δέχεται η διαδικασία View.setPadding είναι σε pixels αλλά εμείς χρειαζόμαστε τιμές σε DP ώστε να καταστήσουμε τις διαστάσεις μας όσο το δυνατόν πιο ανεξάρτητες από το DENSITY της οθόνης κάθε συσκευής οπότε θα χρησιμοποιήσουμε φόρμουλα μετατροπής των DP (24x24dp) σε PIXELS. * Το παράδειγμα που ακολουθεί δεν είναι ολοκληρωμένο, μπορεί να υπάρχουν bugs ή άλλες αβλεψίες αρκεί όμως για να μπεις στο πνεύμα και να το ψάξεις περισσότερο μόνος σου MyTextView.java /* * TopLeft Logo TextView * xdir */ package com.example.topleft; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.widget.TextView; public class MyTextView extends TextView { private Bitmap bmpLogo; private Paint pnt; // TextView ctors public MyTextView(Context context) { super(context); setupLogo(); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); setupLogo(); } public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setupLogo(); } // // Setup TextView component logo // private void setupLogo() { final Resources res = getContext().getResources(); // Load drawable as bitmap of medium display density bmpLogo = BitmapFactory.decodeResource(res, R.drawable.logo2); bmpLogo.setDensity(DisplayMetrics.DENSITY_MEDIUM); // A typical paint object pnt = new Paint(); // Make room (padding) within the TextView component for bmpLogo drawing // Because setPadding works with pixels I must convert DP to pixels // for more see: // http://developer.android.com/guide/practices/screens_support.html#dips-pels final float scale = res.getDisplayMetrics().density; setPadding((int)(24 * scale + 0.5f), (int)(24 * scale + 0.5f), 0, 0); } // // Subclass TextView rendering // @Override protected void onDraw(Canvas canvas) { // Let TextView draw it self normally super.onDraw(canvas); // ..and now draw at 0, 0 (T,L) our bmpLogo canvas.drawBitmap(bmpLogo, 0, 0, pnt); } } activity_main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <com.example.topleft.MyTextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="14dp" android:layout_marginTop="14dp" android:text="A Red Logo" /> </RelativeLayout> Το MyTextView όπως φαίνεται (rendering) στον Form Editor: Το MyTextView όπως φαίνεται (rendering) στον emulator: Το MyTextView όπως φαίνεται (rendering) στην συσκευή μου: ..Ooops.. για Red Logo πήγαινα αλλά το drawable εκ παραδρομής το έχω Green !! Επεξ/σία 7 Οκτωβρίου 2013 από Directx 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα