2014-11-18 2 views
1

Я пытаюсь использовать пользовательский вид в качестве значка рядом с кнопкой вверх. Я искал решение в Интернете и читал что-то об использовании кеша чертежа и пытался реализовать его в своем коде, но значок не отображается.Использовать пользовательский вид как значок панели действий

ActionBar bar = getSupportActionBar(); 
    bar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.scheme_dark_blue))); 
    bar.setTitle(i.getStringExtra("schoolDay")); 
    CalendarIcon icon = (CalendarIcon) getLayoutInflater().inflate(R.layout.icon_calendar, null); 
    icon.setDrawingCacheEnabled(true); 
    day = Integer.parseInt(i.getStringExtra("date")); 
    icon.setData(day + ""); 
    icon.buildDrawingCache(); 
    bar.setIcon(new BitmapDrawable(getResources(), icon.getDrawingCache())); 
    bar.setDisplayHomeAsUpEnabled(true); 

Спасибо за любую помощь :)

ответ

1

Вашего код, вероятно, не работает, потому что взгляд не имеет размера еще. Я также предлагаю вам не использовать кеш чертежа, а вместо этого нарисовать представление на холсте.

Я написал небольшой пример, когда в представлении задан размер, когда он еще не установлен. Возможно, вам захочется настроить код, чтобы он соответствовал вашим потребностям.

Пример:

public static Drawable createDrawableFromView(View v, int requestedWidth, int requestedHeight) { 
    // Because the view is never shown it does not have a size, but if shown don't resize it. 
    if (v.getMeasuredHeight() <= 0) { 

     // You may want to change these lines according to the behavior you need. 
     int specWidth = MeasureSpec.makeMeasureSpec(requestedWidth, MeasureSpec.AT_MOST); 
     int specHeight = MeasureSpec.makeMeasureSpec(requestedHeight, MeasureSpec.AT_MOST); 
     v.measure(specWidth, specHeight); 
    } 
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 
    v.draw(c); 
    return new BitmapDrawable(v.getContext().getResources(), b); 
} 

Использование:

getActionBar().setTitle("View to icon test"); 
TextView view = new TextView(this); 
view.setText("AI"); 
view.setGravity(Gravity.CENTER); 
view.setTextColor(Color.RED); 
getActionBar().setIcon(createDrawableFromView(view, 250, 250)); 

Результат:

result

+0

Спасибо, много это сработало :) – Evan