2012-09-11 32 views
3

我希望我的搜索欄,看起來像這樣... enter image description here如何使用佈局或使用TextView設置搜索欄大拇指?

TextView的應搜索欄的拇指移動... 我試着用

seek_needle.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="" 
    />  
    <ImageView 
     android:layout_width="25dp" 
     android:layout_height="fill_parent" 
     android:src="@drawable/seek_needle" 
     /> 

</LinearLayout> 

並在mail.xml中

<SeekBar 
       android:id="@+id/seekBar1" 
       android:layout_width="349dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:max="202" 
       android:layout_weight="80" 
       android:thumb="@Layout/seek_needle"     
        >   </SeekBar> 

此應用程序正在崩潰
請幫我...

這裏是logcat的輸出...

09-11 17:50:23.582: I/dalvikvm(4142): threadid=3: reacting to signal 3 
09-11 17:50:23.762: I/dalvikvm(4142): Wrote stack traces to '/data/anr/traces.txt' 
09-11 17:50:24.062: I/dalvikvm(4142): threadid=3: reacting to signal 3 
09-11 17:50:24.212: I/dalvikvm(4142): Wrote stack traces to '/data/anr/traces.txt' 
09-11 17:50:24.582: I/dalvikvm(4142): threadid=3: reacting to signal 3 
09-11 17:50:24.632: I/dalvikvm(4142): Wrote stack traces to '/data/anr/traces.txt' 
09-11 17:50:24.664: D/dalvikvm(4142): GC_CONCURRENT freed 73K, 2% free 9435K/9607K, paused 7ms+8ms 
09-11 17:50:24.862: D/AndroidRuntime(4142): Shutting down VM 
09-11 17:50:24.872: W/dalvikvm(4142): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
09-11 17:50:24.952: E/AndroidRuntime(4142): FATAL EXCEPTION: main 
09-11 17:50:24.952: E/AndroidRuntime(4142): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.audioscreen/com.example.audioscreen.MainActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.audioscreen/com.example.audioscreen.Fm1Activity}: android.view.InflateException: Binary XML file line #63: Error inflating class android.widget.SeekBar 
    09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.os.Looper.loop(Looper.java:137) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at dalvik.system.NativeStart.main(Native Method) 
09-11 17:50:24.952: E/AndroidRuntime(4142): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.audioscreen/com.example.audioscreen.Fm1Activity}: android.view.InflateException: Binary XML file line #63: Error inflating class android.widget.SeekBar 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.startActivityNow(ActivityThread.java:1797) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:135) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:347) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:682) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.widget.TabHost.setCurrentTab(TabHost.java:346) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.widget.TabHost.addTab(TabHost.java:236) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.example.audioscreen.MainActivity.onCreate(MainActivity.java:82) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.Activity.performCreate(Activity.java:4465) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  ... 11 more 
09-11 17:50:24.952: E/AndroidRuntime(4142): Caused by: android.view.InflateException: Binary XML file line #63: Error inflating class android.widget.SeekBar 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.createView(LayoutInflater.java:606) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.Activity.setContentView(Activity.java:1835) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at com.example.audioscreen.Fm1Activity.onCreate(Fm1Activity.java:24) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.Activity.performCreate(Activity.java:4465) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  ... 21 more 
09-11 17:50:24.952: E/AndroidRuntime(4142): Caused by: java.lang.reflect.InvocationTargetException 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at java.lang.reflect.Constructor.constructNative(Native Method) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.view.LayoutInflater.createView(LayoutInflater.java:586) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  ... 36 more 
09-11 17:50:24.952: E/AndroidRuntime(4142): Caused by: android.content.res.Resources$NotFoundException: File res/layout/seek_needle.xml from drawable resource ID #0x7f030008 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.content.res.Resources.loadDrawable(Resources.java:1923) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
09-11 17:50:24.952: E/AndroidRuntime(4142):  at android.widget.AbsSeekBar.<init>(AbsSeekBar.java:70 
09-11 17:50:25.032: D/dalvikvm(4142): GC_CONCURRENT freed 797K, 9% free 9183K/10055K, paused 7ms+7ms 
09-11 17:50:25.203: I/dalvikvm(4142): threadid=3: reacting to signal 3 
09-11 17:50:25.232: I/dalvikvm(4142): Wrote stack traces to '/data/anr/traces.txt' 
09-11 17:50:25.642: I/dalvikvm(4142): threadid=3: reacting to signal 3 
09-11 17:50:25.662: I/dalvikvm(4142): Wrote stack traces to '/data/anr/traces.txt' 
+0

http://stackoverflow.com/questions/10722746/add-dynamic-text-over-android-seekbar-thumb - 這可能會幫助,您可以在的onDraw方法 –

回答

3

這種方法需要從資源繪製,繪製在它上面的一些文字,並返回新繪製。所有你需要做的就是給它一個你的泡泡的資源ID,以及你想要的文本。然後你可以將返回的drawable傳遞到你想要的地方。

public BitmapDrawable writeOnDrawable(int drawableId, String text){ 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true); 

    Paint paint = new Paint(); 
    paint.setStyle(Style.FILL); 
    paint.setColor(Color.BLACK); 
    paint.setTextSize(20); 

    Canvas canvas = new Canvas(bm); 
    canvas.drawText(text, 0, bm.getHeight()/2, paint); 

    return new BitmapDrawable(bm); 
} 

從複製.. Combine image and text to drawable

編輯:

函數調用看起來像這樣,mFreqbar.setThumb(writeOnDrawable(R.drawable.fm_radio_tune_position, mytext)); 我遵守了我fm_radio_tune_position.png文件中res/drawable/和 'mytext' 是我想要的字符串寫在答案的翻譯誰使用MonoDroid的/ Xamarin.An是繪製

+0

寫文本意味着我們不需要任何xml文件 – cammando

+0

是的,不需要xml。 –

+0

井@Charan排我試圖實現它,但問題是文本拇指內隱藏和,如果我調整經由提供Ýbm.getHeigh()/ 2然後的不同值它獲取隱藏它高於母體佈局內 – cammando

0

功能的頂部機器人如下:

public BitmapDrawable WriteOnDrawable(int drawableId, String text) 
    { 
     Bitmap bm = BitmapFactory.DecodeResource(Resources, drawableId).Copy(Bitmap.Config.Argb8888, true); 

     Paint paint = new Paint(); 
     paint.SetStyle(Paint.Style.Fill); 
     paint.Color = Color.Black; 
     paint.TextSize = 20; 

     Canvas canvas = new Canvas(bm); 
     canvas.DrawText(text, 0, bm.Height/2, paint); 

     return new BitmapDrawable(bm); 
    }