Programim dhe zhvillim, javascript, python, php, html

Njoftimi i stilimit InboxStyle

Unë përpiqem të zbatoj një njoftim të zgjatshëm dhe kam përdorur InboxStyle për këtë.

Bazuar në imazhin e mëposhtëm nga dokumentacioni:

njoftim në stilin e kutisë hyrëse

duhet të jetë e mundur stilizimi i tekstit. Në këtë rast, bëni "Google Play" me shkronja të zeza.

InboxStyle ka vetëm addLine() ku mund të kaloj një CharSequence. Provova me Html.fromHtml() dhe përdora disa formatime html por nuk ia dola.

NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.setBigContentTitle("title");
inboxStyle.setSummaryText("summarytext");
// fetch push messages
synchronized (mPushMessages) {
    HashMap<String, PushMessage> messages = mPushMessages.get(key);
    if (messages != null) {
        for (Entry<String, PushMessage> msg : messages.entrySet()) {
            inboxStyle.addLine(Html.fromHtml("at least <b>one word</b> should be bold!");
        }
        builder.setStyle(inboxStyle);
        builder.setNumber(messages.size());
    }
}

Ndonjë ide për këtë?

30.01.2013

Përgjigjet:


1

Ju nuk keni nevojë të përdorni fromHtml. Unë kam pasur probleme me fromHtml në të kaluarën (kur ajo që shfaq vjen nga përdoruesi, injektimi i kodit mund të rezultojë në gjëra të shëmtuara). Gjithashtu, nuk më pëlqen vendosja e elementeve të formatimit në strings.xml (nëse përdorni shërbime për përkthim, ato mund të prishin etiketat tuaja HTML).

Metoda addLine, si shumica e metodave për të vendosur tekstin në njoftime (setTicker, setContentInfo, setContentTitle, etj.) marrin një parametër CharSequence.

Kështu që ju mund të kaloni një Spannable. Le të themi se dëshironi "Bold këtë dhe italic atë.", mund ta formatoni në këtë mënyrë (natyrisht, mos i kodoni pozicionet e forta):

Spannable sb = new SpannableString("Bold this and italic that.");
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
sb.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 14, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
inboxStyle.addLine(sb);

Tani nëse keni nevojë të ndërtoni vargun në mënyrë dinamike me vargje të lokalizuara, si p.sh. "Sot është [DITA], mirëmëngjes!", vendosni vargun me një mbajtës vendi në strings.xml:

<string name="notification_line_format">Today is %1$s, good morning!</string>

Pastaj formatoni në këtë mënyrë:

String today = "Sunday";
String lineFormat = context.getString(R.string.notification_line_format);
int lineParamStartPos = lineFormat.indexOf("%1$s");
if (lineParamStartPos < 0) {
  throw new InvalidParameterException("Something's wrong with your string! LINT could have caught that.");
}
String lineFormatted = context.getString(R.string.notification_line_format, today);

Spannable sb = new SpannableString(lineFormatted);
sb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), lineParamStartPos, lineParamStartPos + today.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
inboxStyle.addLine(sb);

Do të marrësh "Sot është E diel, mirëmëngjes!", dhe me sa di unë funksionon me të gjitha versionet e Android.

09.02.2014

2

Kodi yt funksionoi si një hijeshi në Samsung S3 tim me Android 4.1.1 në të. Çfarë versioni Android po përdorni?

import android.app.Activity;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.text.Html;
import android.view.Menu;

public class MainActivity extends Activity {

    private final int ID = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                this).setSmallIcon(R.drawable.ic_launcher);
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        inboxStyle.addLine(Html
                .fromHtml("<i>italic</i> <b>bold</b> text works"));
        mBuilder.setStyle(inboxStyle);
        mBuilder.setNumber(1);

        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(ID, mBuilder.build());
    }

}
19.02.2013
  • Unë jam duke përdorur Android 4.2.1 (tani 4.2.2) 19.02.2013
  • Kjo eshte interesante. Pra, çfarë rezultati keni duke përdorur kodin e modelit të modifikuar të Aktivitetit më sipër? E provova me emulatorin Android 4.2. Ajo funksionon gjithashtu. 19.02.2013
  • Mund të gërmoja më thellë dhe ta kisha gjetur problemin në anën time: doja të stiloja vetëm një pjesë të mesazhit që do të thotë se përdora fromHtml() vetëm në një pjesë të vargut. Unë përdora fromHtml("<b>bold</b>") + " some other text" dhe rezultati ishte pa stil. Zhvendosja e vargut të mbetur në thirrjen fromHtml() funksionon pa të meta! Faleminderit! 21.02.2013
  • fromHtml() ka shumë të meta. Kontrolloni zgjidhjen më poshtë, mendoj se është më e qëndrueshme. 09.02.2014

  • 3

    Unë kam bërë një metodë ndihmëse për këtë:

    private final StyleSpan mBoldSpan = new StyleSpan(Typeface.BOLD);
    
    private SpannableString makeNotificationLine(String title, String text) {
        final SpannableString spannableString;
        if (title != null && title.length() > 0) {
            spannableString = new SpannableString(String.format("%s  %s", title, text));
            spannableString.setSpan(mBoldSpan, 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            spannableString = new SpannableString(text);
        }
        return spannableString;
    }
    

    Përdorni kështu:

    inboxStyle.addLine(makeNotificationLine("UserXYZ", "How are you?"));
    
    25.08.2014

    4

    Këtu është zgjidhja më e thjeshtë

    Nuk përdor InboxStyle sepse nuk më duhej në rastin tim


    CharSequence boldUsernameMessage = Html.fromHtml("<b>@" + username +"</b> " + message);
    
    NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext())
        .setContentText(boldUsernameMessage)
        .setStyle(new NotificationCompat.BigTextStyle().bigText(boldUsernameMessage)) // Makes it expandable to show the message
        .build();
    

    Rezultati

    fut përshkrimin e imazhit këtu

    26.04.2016
  • kur njoftimi nuk zgjerohet, emri i përdoruesit mikemilla nuk është i theksuar. Si ta tregojmë mikemillën si të guximshme? Kur zgjerohem mikemilla është bold, gjë që është mirë. 29.08.2017

  • 5

    Për tekstin me shkronja të zeza duhet të përdorni etiketën <strong>. Nuk ka asgjë të keqe me kodin tuaj. Thjesht ndryshoni <b><strong>.

    Edit: Ju duhet ta ndryshoni kodin tuaj në këtë:

    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    inboxStyle.setBigContentTitle("title");
    inboxStyle.setSummaryText("summarytext");
    // fetch push messages
    synchronized (mPushMessages) {
        HashMap<String, PushMessage> messages = mPushMessages.get(key);
        if (messages != null) {
            for (Entry<String, PushMessage> msg : messages.entrySet()) {
                inboxStyle.addLine(Html.fromHtml("at least <strong>one word</strong> should be bold!");
            }
            builder.setStyle(inboxStyle);
            builder.setNumber(messages.size());
        }
    }
    
    14.03.2014
  • A është përgjigja juaj e plotë? Duket se mungojnë pjesë jetike 15.03.2014
  • Unë nuk dua të kopjoj dhe ngjis kodin tuaj këtu. Thjesht ndryshimi i ‹b›një fjalë‹/b› në ‹strong›një fjalë‹/strong› duhet ta bëjë këtë gjë. Po përditësoj përgjigjen time tani. 15.03.2014
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..