অ্যাকশনবারে কীভাবে কাস্টম ভিউ প্রদর্শিত হবে?


92

আমি অ্যাকশনবারে কাস্টম অনুসন্ধান প্রদর্শন করতে চাই (এর জন্য আমি অ্যাকশনবারশারলক ব্যবহার করছি)।

আমি সেটি বুঝতে পেরেছি:

এখানে চিত্র বর্ণনা লিখুন

তবে আমি সম্পূর্ণ উপলব্ধ প্রস্থ দখল করতে কাস্টম লেআউট (edittext ক্ষেত্র) তৈরি করতে চাই।

আমি এখানে প্রস্তাবিত হিসাবে কাস্টম বিন্যাস প্রয়োগ করেছি ।

আমার কাস্টম বিন্যাস আছে search.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="?attr/actionButtonStyle"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_gravity="fill_horizontal"
    android:focusable="true" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|fill_horizontal" >

        <EditText
            android:id="@+id/search_query"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="left|center"
            android:background="@drawable/bg_search_edit_text"
            android:imeOptions="actionSearch"
            android:inputType="text" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right|center_vertical"
            android:src="@drawable/ic_search_arrow" />

    </FrameLayout>

</LinearLayout>

এবং এর মধ্যে MyActivity:

ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_action_search);

LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflator.inflate(R.layout.search, null);

actionBar.setCustomView(v);

সমস্ত উপলব্ধ প্রস্থ দখল করতে আমি কীভাবে কাস্টম লেআউট তৈরি করতে পারি actionBar?

অনুগ্রহ করে সাহায্য করবেন.


আপনি কাস্টম ভিউ সেট দিয়ে শিরোনাম সেট করতে সক্ষম?
রায় লি

উত্তর:


95

এই জন্য একটি কৌশল আছে। আপনাকে যা করতে হবে তা হ'ল মূল পাত্রে RelativeLayoutপরিবর্তে ব্যবহার করা LinearLayout। এটি android:layout_gravity="fill_horizontal"জন্য সেট করা গুরুত্বপূর্ণ । যা করা উচিৎ.


4
@ টমিক আপনি কি আমার দৃশ্যের দিকে একবার নজর দিতে পারেন? stackoverflow.com/questions/16516306/… কাস্টম ভিউ সেট হওয়ার পরে আমার কাছে শিরোনাম নেই।
রায় লি

36

আমি নিজেও এটির সাথে লড়াই করেছি, এবং টমিকের উত্তর চেষ্টা করেছি। তবে, আপনি যখন ভিউটিতে কিছু যুক্ত করবেন কেবল তখনই এটি শুরুতে পুরো উপলব্ধ প্রস্থে বিন্যাস তৈরি করতে পারেনি।

LayoutParams.FILL_PARENTভিউটি যুক্ত করার সময় আপনার অবশ্যই সেট করতে হবে :

//I'm using actionbarsherlock, but it's the same.
LayoutParams layout = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
getSupportActionBar().setCustomView(overlay, layout); 

এইভাবে এটি উপলব্ধ স্থানটি পুরোপুরি পূরণ করে। (আপনারও টমিকের সমাধানটি ব্যবহার করতে হতে পারে)।


4
+1, আসলে, এটি কেবলমাত্র লেআউটপ্যারাম যোগ করার পরে আমার জন্য কাজ করেছে, থ্যাঙ্কস
মাহমুদ বদ্রি

4
ওভারলে মান কি?
androidevil

4
@androider আপনার কাস্টম ভিউ। হয় এক্সএমএল থেকে স্ফীত বা কোড তৈরি।
বিলথন

9

এটি আমার পক্ষে এটি কীভাবে কাজ করেছিল (উপরের উত্তরগুলি থেকে এটি উভয়ই ডিফল্ট শিরোনাম এবং আমার কাস্টম ভিউও দেখিয়েছিল)।

ActionBar.LayoutParams layout = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
// actionBar.setCustomView(view); //last view item must set to android:layout_alignParentRight="true" if few views are there 
actionBar.setCustomView(view, layout); // layout param width=fill/match parent
actionBar.setDisplayShowCustomEnabled(true);//must other wise its not showing custom view.

আমি যা লক্ষ্য করেছি তা হ'ল উভয় setCustomView(view)এবং setCustomView(view,params)দর্শন প্রস্থ = ম্যাচ / পূরণের প্যারেন্ট। সেটডিসপ্লেশো কাস্টম এনেবল (বুলিয়ান শো কাস্টম)


দ্বিতীয় প্যারামিটারের মান হিসাবে MATCH_PARENT কে Wrap_CONTENT এ পরিবর্তন করা হচ্ছে।
লিনিয়ারলআউট

6

টমিক এবং পিটারডকের উত্তরগুলি যখন আপনি নিজের কাস্টম ভিউটি পুরো অ্যাকশন বারটি দখল করতে চান এমনকি এমনকী স্থানীয় শিরোনামটি লুকিয়ে রাখতে চান work

তবে আপনি যদি নিজের কাস্টম ভিউটি শিরোনামের সাথে পাশাপাশি থাকতে চান (এবং শিরোনামটি প্রদর্শিত হওয়ার পরে অবশিষ্ট সমস্ত স্থান পূরণ করুন), তবে আমি আপনাকে এখানে ব্যবহারকারী অ্যান্ড্রয়েড-বিকাশকারীদের দুর্দান্ত উত্তরটি উল্লেখ করতে পারি:

https://stackoverflow.com/a/16517395/614880

নীচে তার কোডটি আমার পক্ষে নিখুঁতভাবে কাজ করেছে।


3

উদাহরণস্বরূপ, আপনি একটি লেআউট ফাইল সংজ্ঞায়িত করতে পারেন যা একটি সম্পাদনা পাঠ্য উপাদান রয়েছে।

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/searchfield"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:inputType="textFilter" >

</EditText> 

আপনি করতে পারেন

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar = getActionBar();
    // add the custom view to the action bar
    actionBar.setCustomView(R.layout.actionbar_view);
    EditText search = (EditText) actionBar.getCustomView().findViewById(R.id.searchfield);
    search.setOnEditorActionListener(new OnEditorActionListener() {

      @Override
      public boolean onEditorAction(TextView v, int actionId,
          KeyEvent event) {
        Toast.makeText(MainActivity.this, "Search triggered",
            Toast.LENGTH_LONG).show();
        return false;
      }
    });
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM
        | ActionBar.DISPLAY_SHOW_HOME);


    }

আমার এন ঘন্টা বাঁচিয়েছে .. ধন্যবাদ
CrazyMind

1

অ্যান্ড্রয়েডের লঞ্চার অ্যাপটিতে একটি উদাহরণ রয়েছে (যে আমি এখানে একটি লাইব্রেরি তৈরি করেছি, এখানে), ক্লাসের মধ্যে যা ওয়ালপেপার-বাছাই পরিচালনা করে ("ওয়ালপেপারপিকারঅ্যাক্টিভিটি")।

উদাহরণটি দেখায় যে এটি কাজ করার জন্য আপনাকে একটি কাস্টমাইজড থিম সেট করতে হবে। দুঃখের বিষয়, এটি কেবলমাত্র সাধারণ কাঠামো ব্যবহার করে আমার পক্ষে কাজ করেছে, সমর্থন লাইব্রেরির একটিও নয়।

থিম এখানে:

styles.xML

 <style name="Theme.WallpaperPicker" parent="Theme.WallpaperCropper">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowShowWallpaper">true</item>
  </style>

  <style name="Theme.WallpaperCropper" parent="@android:style/Theme.DeviceDefault">
    <item name="android:actionBarStyle">@style/WallpaperCropperActionBar</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBarOverlay">true</item>
  </style>

  <style name="WallpaperCropperActionBar" parent="@android:style/Widget.DeviceDefault.ActionBar">
    <item name="android:displayOptions">showCustom</item>
    <item name="android:background">#88000000</item>
  </style>

মান-ভি 19 / স্টাইল.এক্সএমএল

 <style name="Theme.WallpaperCropper" parent="@android:style/Theme.DeviceDefault">
    <item name="android:actionBarStyle">@style/WallpaperCropperActionBar</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
  </style>

  <style name="Theme" parent="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
  </style>

সম্পাদনা: এটি করার আরও একটি ভাল উপায় আছে যা সাপোর্ট লাইব্রেরিতেও কাজ করে। আমি উপরে যা লিখেছি তার পরিবর্তে কোডের এই লাইনটি যুক্ত করুন:

getSupportActionBar().setDisplayShowCustomEnabled(true);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.