Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά,

         μηπώς μπορεί να μου πει κανείς πως μπορω να βάλω μια εικόνα σε ένα textView τερμα πάνω δεξια σαν Background? Επίσης με ποια μέθοδο μπορώ να μεταβάλλω αυτήν την είκόνα μέσα από το Activity που βρίσκεται το TextView?

Ευχαριστώ.

Δημοσ.

Ένας απλός τρόπος για να ορίσεις ένα συνοδευτικό drawable (σε ένα από τα τέσσερα σημεία του ορίζοντα) στο textView component είναι μέσω της διαδικασίας setCompoundDrawablesWithIntrinsicBounds (και συμβατών) ή των ανάλογων properties (πχ. drawableLeft, drawableRight property κλπ).

 

Για πιο ειδικευμένα οπτικά αποτελέσματα ρίξε μια ματιά στο background propertysetBackgroundResource) του component και ίσως στα properties των διαστάσεων του.

 

Καλή συνέχεια.

Δημοσ.

Ένας απλός τρόπος για να ορίσεις ένα συνοδευτικό drawable (σε ένα από τα τέσσερα σημεία του ορίζοντα) στο textView component είναι μέσω της διαδικασίας setCompoundDrawablesWithIntrinsicBounds (και συμβατών) ή των ανάλογων properties (πχ. drawableLeft, drawableRight property κλπ).

 

Για πιο ειδικευμένα οπτικά αποτελέσματα ρίξε μια ματιά στο background propertysetBackgroundResource) του component και ίσως στα properties των διαστάσεων του.

 

Καλή συνέχεια.

Thank you! πολύ καλό!

μήπως γίνεται με τον πρώτο τρόπο να επιλέξω πάνω και δεξιά μαζί?

έτσι όπως το κατάλαβα εγώ μπορώ ή σκέτο δεξιά ή σκέτο πάνω.

Ο συνδιασμός τους είναι δυνατόν να επιτευχθεί με τον εύκολο τρόπο?

Δημοσ. (επεξεργασμένο)

Ο συνδιασμός τους είναι δυνατόν να επιτευχθεί με τον εύκολο τρόπο?

Όπως προείπα η δυνατότητα στοίχισης του 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:

post-41640-0-43648500-1381142823_thumb.png

Το MyTextView όπως φαίνεται (rendering) στον emulator:

post-41640-0-03671900-1381142833_thumb.png

Το MyTextView όπως φαίνεται (rendering) στην συσκευή μου:

post-41640-0-22635700-1381142842_thumb.png

..Ooops.. για Red Logo πήγαινα αλλά το drawable εκ παραδρομής το έχω Green !! :P

 

 

Επεξ/σία από Directx
  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...