Jak změnit hvězdy obrazy RatingBar?




Díky `Android SDK 1.1 r1`, je tam nějaký způsob, jak změnit `RatingBar`hvězda image widget Class se svou vlastní? Je to vůbec možné? Pokud ano, tak jak?


Dík.
Stručná odpověď je, že vypadá, jako by to techincally možné. Nejjednodušší způsob, jak by bylo vytvořit vlastní RatingBar na základě RatingBar sourcecode (elegantnější by bylo `extend`v Orignal RatingBar do své vlastní). Odtud byste také muset vytvořit svůj vlastní styl pomocí RatingBar původní zdrojový RatingBar XML jako příklad (nebo dědí a prodlužuje původní RatingBar styl).


Zdroj je k dispozici wtih git na developer.android.com.


Mám podezření, že vytvořit vlastní hodnocení bar se nedoporučuje, protože je v rozporu s ustálenou vzhled a dojem z operačního systému.
<p>beru jádro otázky: "... nejsem schopen získat název třídy widgetu"</p><p>budete muset zkontrolovat proměnnou <code>global</code> <code>$wp\_registered\_widgets</code>, abyste vyplnili chybějící informace. tento testovací kód by vám měl dát nápad. kód předpokládá postranní panel s názvem <code>sidebar-1</code>. budete to muset upravit.</p><pre><code>global $wp\_registered\_widgets; $widgets = wp\_get\_sidebars\_widgets(); var\_dump($widgets['sidebar-1']); // dump the data foreach ($widgets['sidebar-1'] as $widget) { var\_dump($wp\_registered\_widgets[$widget]); // dump the data } </code></pre><p>pro více informací, <a href="https://core.trac.wordpress.org/browser/tags/3.8/src/wp-includes/widgets.php#l845">se podívejte na to, jak <code>dynamic\_sidebar</code> funguje</a> , což je v podstatě to, co jsem udělal pro to, abych výše popsal.</p><p>neotestovaný, ale tohle bylo dost zajímavé, že jsem posmíval nějaký další úplný kód:</p><pre><code>global $wp\_registered\_widgets; $i = 1; $widgets = wp\_get\_sidebars\_widgets(); $widgets = $widgets['homepage-1']; if ( have\_posts() ) { while ( have\_posts() ) { the\_post(); if ($i%3 == 0){ echo "&lt;h1&gt;widget #".($i%3)."&lt;/h1&gt;"; $cn = $wp\_registered\_widgets[$widgets[$i%3]]['callback'][0]; $cn = get\_class($cn); the\_widget($cn,$widgets[$i%3]); } get\_template\_part( 'content', get\_post\_format() ); $i++; } \_s\_paging\_nav(); } else { get\_template\_part( 'content', 'none' ); } </code></pre> <p>jednoduchým způsobem by bylo nastavit nějakou globální proměnnou na prvním spuštění widgetu a zkontrolovat ji. není-li již nastavena žádná nebo informační zpráva.</p><p>správným způsobem by pravděpodobně bylo pracovat s rozhraním a odstranit widget z dostupných, když ho přidáte do postranního panelu, ale to je cesta z mé ligy.</p> Ano jde, v aplikaci Googe Fotky v mobilu vlez do menu > Spravovat knihovnu > Složky zařízení a tam si zatrhej nebo zruš, co libo. <h2>možnost 1) rychlý a snadný způsob (pouze panel nástrojů)</h2><p>protože appcompat-v7-r23 můžete použít následující atributy přímo ve vašem <code>toolbar</code> nebo jeho stylu:</p><pre><code>app:titletextcolor="@color/primary\_text" app:subtitletextcolor="@color/secondary\_text" </code></pre><p>pokud je vaše minimální sdk 23 a používáte nativní <code>toolbar</code>, stačí změnit předponu oboru názvů na <code>android</code>.</p><p>v jazyce java můžete použít následující metody:</p><pre><code>toolbar.settitletextcolor(color.white); toolbar.setsubtitletextcolor(color.white); </code></pre><p>tyto metody mají barvu int není id zdroje barev!</p><h2>možnost 2) přepsat atributy panelu nástrojů a motivů</h2><h3>layout/xxx.xml</h3><pre><code>&lt;android.support.v7.widget.toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout\_width="match\_parent" android:layout\_height="wrap\_content" android:minheight="?attr/actionbarsize" android:theme="@style/themeoverlay.myapp.actionbar" app:popuptheme="@style/themeoverlay.appcompat.light" style="@style/widget.myapp.toolbar.solid"/&gt; </code></pre><h3>values ​​/ styles.xml</h3><pre><code>&lt;style name="widget.myapp.toolbar.solid" parent="widget.appcompat.actionbar"&gt; &lt;item name="android:background"&gt;@color/actionbar\_color&lt;/item&gt; &lt;item name="android:elevation" tools:ignore="newapi"&gt;4dp&lt;/item&gt; &lt;item name="titletextappearance"&gt;...&lt;/item&gt; &lt;/style&gt; &lt;style name="themeoverlay.myapp.actionbar" parent="themeoverlay.appcompat.actionbar"&gt; &lt;!-- parent theme sets colorcontrolnormal to textcolorprimary. --&gt; &lt;item name="android:textcolorprimary"&gt;@color/actionbar\_title\_text&lt;/item&gt; &lt;/style&gt; </code></pre><h3>pomoc! moje ikony také měnily barvu!</h3><p>@peterknut oznámil, že to ovlivňuje barvu tlačítka přetečení, tlačítka navigační zásuvky a tlačítka zpět. změní také barvu textu <code>searchview</code>.</p><p>pokud jde o barvy ikon: <code>colorcontrolnormal</code> zdědí od </p><ul> <li><code>android:textcolorprimary</code> pro tmavé motivy (bílá na černém pozadí)</li> <li><code>android:textcolorsecondary</code> pro světlá témata (černá na bílém)</li> </ul><p>použijete-li toto téma na motiv panelu <em>akce</em>, můžete upravit barvu ikony.</p><pre><code>&lt;item name="colorcontrolnormal"&gt;#de000000&lt;/item&gt; </code></pre><p>došlo k chybě v aplikaci appcompat-v7 až do verze r23, která vyžadovala, abyste také přepsali nativní podobu takto:</p><pre><code>&lt;item name="android:colorcontrolnormal" tools:ignore="newapi"&gt;?colorcontrolnormal&lt;/item&gt; </code></pre><h2>pomoc! můj searchview je nepořádek!</h2><p><em>poznámka: tato sekce je možná zastaralá.</em></p><p>protože používáte widget pro vyhledávání, který z nějakého důvodu používá jinou šipku zpět (ne vizuálně, technicky) než ten, který je součástí aplikace appcompat-v7, musíte jej nastavit ručně v motivu <em>aplikace</em>. zásuvky podpůrné knihovny jsou vybarveny správně. jinak by to bylo vždy bílé.</p><pre><code>&lt;item name="homeasupindicator"&gt;@drawable/abc\_ic\_ab\_back\_mtrl\_am\_alpha&lt;/item&gt; </code></pre><p>pokud jde o text hledaného pohledu ... neexistuje snadný způsob. po kopání zdrojem jsem našel způsob, jak se dostat do textového pohledu. nezkoušel jsem to tak, dejte mi prosím vědět v komentářích, pokud to nefungovalo. </p><pre><code>searchview sv = ...; // get your search view instance in oncreateoptionsmenu // prefix identifier with "android:" if you're using native searchview textview tv = sv.findviewbyid(getresources().getidentifier("id/search\_src\_text", null, null)); tv.settextcolor(color.green); // and of course specify your own color </code></pre><h2>bonus: přepíše atributy stylu actionbar a motivu</h2><p>správný styl pro výchozí akční panel appcompat-v7 by vypadal takto:</p><pre><code>&lt;!-- actionbar vs toolbar. --&gt; &lt;style name="widget.myapp.actionbar.solid" parent="widget.appcompat.actionbar.solid"&gt; &lt;item name="background"&gt;@color/actionbar\_color&lt;/item&gt; &lt;!-- no prefix. --&gt; &lt;item name="elevation"&gt;4dp&lt;/item&gt; &lt;!-- no prefix. --&gt; &lt;item name="titletextstyle"&gt;...&lt;/item&gt; &lt;!-- style vs appearance. --&gt; &lt;/style&gt; &lt;style name="theme.myapp" parent="theme.appcompat"&gt; &lt;item name="actionbarstyle"&gt;@style/widget.myapp.actionbar.solid&lt;/item&gt; &lt;item name="actionbartheme"&gt;@style/themeoverlay.myapp.actionbar&lt;/item&gt; &lt;item name="actionbarpopuptheme"&gt;@style/themeoverlay.appcompat.light&lt;/item&gt; &lt;/style&gt; </code></pre> Nevím...vyzkoušej..How do I get the weather widget on my Huawei?Press Home button to show the home screen. Tap and hold your finger on any available space, select Widgets -> Clock & Weather <p>rozhraní api <a href="http://codex.wordpress.org/widgets\_api#developing\_widgets\_on\_2.8.2b">widgetů</a> je nejrychlejší způsob, jak vytvořit widget, který lze znovu použít. příklad použití:</p><pre><code>class my\_widget extends wp\_widget { /** * php4 constructor */ function my\_widget() { my\_widget::\_\_construct(); } /** * php5 constructor */ function \_\_construct() { // actual widget processes } /** * echo the settings update form * * @param array $instance current settings */ function form($instance) { // outputs the options form on admin } /** * update a particular instance * * @param array $new\_instance new settings for this instance as input by the user via form() * @param array $old\_instance old settings for this instance * @return array settings to save or bool (false) to cancel saving */ function update($new\_instance, $old\_instance) { // processes widget options to be saved } /** * echo the widget content * * @param array $args display arguments including before\_title, after\_title, before\_widget, and after\_widget * @param array $instance the settings for the particular instance of this widget */ function widget($args, $instance) { // outputs the content of the widget } } register\_widget('my\_widget'); </code></pre> <p><em> se objeví </em> na základě <a href="http://drupal.org/node/742142">this</a> a <a href="http://philwilson.org/blog/2010/01/adding-a-bookmark-to-an-android-home-screen">this</a> , že android použije typ <code>rel</code> z <code>apple-touch-icon-precomposed</code> nebo <code>apple-touch-icon</code>, <strong>but</strong>, aby k tomu fungovalo, musíte použít plně kvalifikovanou url, např .:</p><pre><code>&lt;link rel="apple-touch-icon-precomposed" href="http://www.example.com/custom\_icon.png" /&gt; </code></pre><p>nebo:</p><pre><code>&lt;link rel="apple-touch-icon" href="http://www.example.com/custom\_icon.png" /&gt; </code></pre><p>výzva je taková, že se zdá, že platí pro <strong>android 2.1 update 1</strong> &amp; <strong>webkit 3.1</strong>. <a href="http://developer.android.com/reference/android/webkit/webchromeclient.html#onreceivedtouchiconurl%28android.webkit.webview,%20java.lang.string,%20boolean%29">dokumentace pro vývojáře android</a> uvádí metodu v <code>android.webkit</code>, která je událostí, když je načtena <code>apple-touch-icon</code>.</p> <p>změna výchozího widgetu by byla dost komplikovaná.</p><p>můžete však napsat svůj vlastní krátký kód a funkci pro získání požadovaného seznamu.</p><p>hádám, že chcete mít ve svém widgetu neuspořádaný seznam?</p><p>dejte to do funkcí theme.php:</p><pre><code>add\_shortcode('archive\_by\_year\_and\_month','get\_archive\_by\_year\_and\_month'); function get\_archive\_by\_year\_and\_month($atts=array()){ global $wpdb; $years = $wpdb-&gt;get\_col("select distinct year(post\_date) from $wpdb-&gt;posts where post\_type = 'post' and post\_status = 'publish' order by post\_date desc"); if($years){ $rueckgabe = '&lt;ul&gt;'; foreach($years as $year){ $rueckgabe.='&lt;li class="jahr"&gt;&lt;a href="'.get\_year\_link($year).'"&gt;'.$year.'&lt;/a&gt;'; $rueckgabe.='&lt;ul class="monthlist"&gt;'; $months = $wpdb-&gt;get\_col($wpdb-&gt;prepare("select distinct month(post\_date) from $wpdb-&gt;posts where post\_type='post' and post\_status='publish' and year(post\_date) = %d order by post\_date asc",$year)); foreach($months as $month){ $dateobj = datetime::createfromformat('!m', $month); $monthname = $dateobj-&gt;format('f'); $rueckgabe.='&lt;li class="month"&gt;&lt;a href="'.get\_month\_link($year,$month).'"&gt;'.$monthname.'&lt;/a&gt;&lt;/li&gt;'; } $rueckgabe.='&lt;/ul&gt;'; $rueckgabe.='&lt;/li&gt;'; } $rueckgabe.='&lt;/ul&gt;'; } return $rueckgabe; } </code></pre><p>poté vložte textovou widget do postranního panelu a zadejte krátký kód:</p><pre><code>[archive\_by\_year\_and\_month] </code></pre><p>hit save and voila: měli byste dostat svůj seznam podle svého přání.</p><p>happy coding!</p> <p>spusťte aplikaci v režimu ladění a nastavte zarážku, pokud <code>(requestcode == select\_picture)</code> a zkontrolujte každou proměnnou, jak budete postupovat, abyste zajistili, že je nastavena podle očekávání. pokud získáváte npe na <code>img.setimageuri(selectedimageuri);</code>, pak <code>img</code> nebo <code>selectedimageuri</code> nejsou nastaveny. </p> <p>jedním ze způsobů, jak toho dosáhnout, by bylo mít náladové desky (více informací zde: <a href="http://www.viget.com/inspire/getting-moody/">http://www.viget.com/inspire/getting-moody/</a> ), zobrazující barevné palety, typografie, snímky, v podstatě cokoli souvisí s webem.</p>