পছন্দসই স্ক্রিনের নীচে একটি বোতাম যুক্ত করার এবং স্ক্রোল করার সময় সেগুলিকে সঠিকভাবে কাজ করার কোনও উপায় আছে কি?
পছন্দসই স্ক্রিনের নীচে একটি বোতাম যুক্ত করার এবং স্ক্রোল করার সময় সেগুলিকে সঠিকভাবে কাজ করার কোনও উপায় আছে কি?
উত্তর:
পছন্দগুলির চেহারাটি কাস্টমাইজ করার জন্য আরও একটি সমাধান রয়েছে।
বোতামগুলি বা আপনি যা পছন্দসই পছন্দগুলিতে যুক্ত করতে চান তা দিয়ে একটি সাধারণ এক্সএমএল লেআউট ডিজাইন করুন। ListView
আপনার লেআউটে একটি অন্তর্ভুক্ত করুন এবং এটি আইডি দিন @android:id/list
।
ধরা যাক আমরা লেআউট ফাইলটি কল করি res/layout/main.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">
<Button android:text="This is a button on top of all preferences."
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
আপনার মধ্যে PreferenceActivity
, এই দুটি লাইন আপনার onCreate
:
addPreferencesFromResource(R.xml.preferences);
setContentView(R.layout.main);
ListView
আপনার লেআউট তারপর পছন্দ স্বাভাবিক ভাবেই সংজ্ঞায়িত দ্বারা প্রতিস্থাপন করা হবে res/xml/preferences.xml
।
আমি জানি এটি কিছুটা দেরি হয়ে গেছে, তবে আমি সবেমাত্র একটি সমাধান পেয়েছি যা ম্যাক্সের প্রশংসিত সমাধানের চেয়ে ভাল like
আপনি পছন্দসই কার্যকলাপের তালিকার ভিউতে কেবল একটি পাদচরণ (অথবা আপনি যদি শীর্ষে থাকা বোতামটি শীর্ষে রাখতে চান) can
public class MyActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
ListView v = getListView();
v.addFooterView(new Button(this));
}
}
আমি আশা করি এটা কারো সাহায্যে লাগবে.
ListView
পছন্দসই ফ্রেঞ্চটি পেতে পারি না :(
PreferenceFragment
তার নিজস্ব তালিকা আছে), কিন্তু আমি শুধু একটি তৈরি করে এটিকে সমাধান Preference
এবং একটি সেটিং Intent
এটিতে। কোনও বোতাম তৈরি করার দরকার নেই (কমপক্ষে আমার ক্ষেত্রে)
নীচের এই উদাহরণটি পৃষ্ঠার নীচে একটি বোতাম রেন্ডার করবে (যদি কেউ এখনও আগ্রহী হন)।
লিনিয়ারলআউটের ক্ষেত্রে আপনি ওজন প্রয়োগ করতে পারেন; এটি প্রয়োজন কারণ তালিকাভিউটি * ফিল_প্যারেন্ট * এ সেট করা আছে। আমি সাধারণত * অ্যান্ড্রয়েড: লেআউট_ ওয়েট * এর যোগ করে এটি করি:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_weight="10"/>
<Button android:text="This is a button on top of all preferences."
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_weight="1"/>
</LinearLayout>
নীচের ব্যাখ্যাটি সম্ভবত 100% নয় তবে এটি আপনাকে বুঝতে সহায়তা করবে ...
+-- View Port (linear layout)
| +-- List View (this is where the preferences will go)
| |
| |
| +--
+--
+--
| Button (which was pushed out of view by the fillparent of ListView
+--
আপনি এটিও বলতে পারেন, কারণ বোতামটির ওজন নেই; বোতামটি 0dp উচ্চতায় রেন্ডার করা হয়।
এখন লেআউট_উইগথগুলি যুক্ত করার সাথে সাথে এটি বোতামটি সংক্ষিপ্ত বিবরণ দেয়
+-- View Port (linear layout)
| +-- List View (this is where the preferences will go)
| |
| |
| +--
| +--
| | Button (which was pushed out of view by the fillparent of ListView
| +--
+--
আসলে, একটি সমাধান আছে। এখানে একটি কোড রয়েছে, আমি আশা করি, এটি যে কারও পক্ষে কার্যকর হবে। দেখতে পর্দার নীচে 3 টি বিকল্প এবং 2 টি বোতামের মতো দেখতে পর্দার সমাধানের চেয়ে পৃথক (সর্বনিম্ন 240 তে টার্গেট করা হয়েছিল)
package com.myapplication.gui;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.view.Display;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import com.myproject.general.HeightListView;
import com.myapplication.R;
public class FilterActivity extends PreferenceActivity {
private LinearLayout rootView;
private LinearLayout buttonView;
private Button buttonDone;
private Button buttonRevert;
private ListView preferenceView;
private LinearLayout gradientView;
private ScrollView scrollRoot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int height = display.getHeight();
int width = height > 240 ? display.getWidth() : display.getWidth() - 4;
scrollRoot = new ScrollView(this);
scrollRoot.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
rootView = new LinearLayout(this);
rootView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
rootView.setOrientation(LinearLayout.VERTICAL);
buttonView = new LinearLayout(this);
buttonView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
buttonView.setOrientation(LinearLayout.HORIZONTAL);
buttonView.setGravity(Gravity.BOTTOM);
gradientView = new LinearLayout(this);
gradientView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
gradientView.setOrientation(LinearLayout.HORIZONTAL);
gradientView.setBackgroundResource(R.drawable.gradient);
gradientView.setPadding(0, 5, 0, 0);
gradientView.setBackgroundResource(R.drawable.gradient);
buttonDone = new Button(this);
buttonDone.setText(R.string.filterButton_Done);
buttonDone.setLayoutParams(new LayoutParams(width/2, LayoutParams.WRAP_CONTENT));
gradientView.addView(buttonDone);
buttonRevert = new Button(this);
buttonRevert.setText(R.string.filterButton_Revert);
buttonRevert.setLayoutParams(new LayoutParams(width/2, LayoutParams.WRAP_CONTENT));
gradientView.addView(buttonRevert);
buttonView.addView(gradientView);
preferenceView = new HeightListView(this);
preferenceView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
preferenceView.setId(android.R.id.list);
PreferenceScreen screen = createPreferenceHierarchy();
screen.bind(preferenceView);
preferenceView.setAdapter(screen.getRootAdapter());
rootView.addView(preferenceView);
rootView.addView(buttonView);
if (height > 240) {
this.setContentView(rootView);
}
else {
scrollRoot.addView(rootView);
this.setContentView(scrollRoot);
}
setPreferenceScreen(screen);
}
private PreferenceScreen createPreferenceHierarchy() {
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
PreferenceScreen pref1 = getPreferenceManager().createPreferenceScreen(this);
pref1.setKey("pref1");
pref1.setTitle("Title");
pref1.setSummary("Summary");
root.addPreference(pref1);
PreferenceScreen pref2 = getPreferenceManager().createPreferenceScreen(this);
pref2.setKey("pref2");
pref2.setTitle("Title");
pref2.setSummary("Summary");
root.addPreference(pref2);
PreferenceScreen pref3 = getPreferenceManager().createPreferenceScreen(this);
pref3.setKey("pref3");
pref3.setTitle("Title");
pref3.setSummary("Summary");
root.addPreference(pref3);
return root;
}
}
আপনার কেবল সাধারণ ক্রিয়াকলাপের মধ্যে পছন্দের ফ্রেম ব্যবহার করতে হবে এবং কার্যকলাপের বিন্যাসে বোতামটি যুক্ত করতে হবে।
public class SettingActivity extends Activity {
UserProfileViewModel userProfileViewModel = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
getFragmentManager().beginTransaction()
.replace(R.id.content, new SettingsFragment())
.commit();
}
private class SettingsFragment extends PreferenceFragment {
public SettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.pref_main);
}
}
}
SettingActivity.java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/buttonSave"/>
<Button
android:id="@+id/buttonSave"
android:text="Save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
activity_setting
buttonSave
:)
কোডটি রনিটির উদাহরণে ক্রিয়াকলাপের মতো দেখতে হবে। আমার উদ্দেশ্যটি ছিল পর্দার নীচের দিকে একটি মেনু রাখা।
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.prefs);
addPreferencesFromResource(R.xml.prefs);
/* LayoutInflater CX = getLayoutInflater();
CX.inflate(R.layout.main,null);*/
// TODO Auto-generated method stub
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="@dimens/listview_height" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="This is a button on top of all preferences." />
</RelativeLayout>
আমি @ রনি রেফারেন্স করি, রিলেটিভলআউট ব্যবহার করি এবং তালিকা-দর্শনের লেআউট_ উচ্চতার জন্য উচ্চতা নির্ধারণ করি এবং তারপরে বোতামের লেআউট_লিগান্পিয়ারবটম = "সত্য" সেট করি, এটি পছন্দ স্ক্রিনের নীচে একটি বোতাম রেন্ডার করতে পারে; তারপরে @ ম্যাক্সের উপায়টি ব্যবহার করুন। এটি আমার প্রয়োজনের জন্য কাজ করে।
অ্যান্ড্রয়েড স্ট্যান্ডার্ড পদ্ধতির জন্য অ্যাকশন বারে অ্যাকশন বোতাম যুক্ত করাও সম্ভব।
public class PrefActivity extends PreferenceActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.preference_header_menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_add"
android:icon="@drawable/ic_menu_add_dark"
android:title="@string/menu_action_add_title"
android:showAsAction="always" />
</menu>
পছন্দের ক্রিয়াকলাপে কাস্টম দর্শন এটি অ্যান্ড্রয়েডে পছন্দসই কার্যকলাপে কাস্টম ভিউ যুক্ত করতে সহায়তা করবে।
মেইন.এক্সএমএল তৈরি করুন, কেবলমাত্র প্রয়োজনীয় ভিউ হ'ল আইডি সহ একটি তালিকাভিউ android:id="@android:id/list"
।
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="1">
<ListView
android:id="@android:id/list"
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="0dp">
</ListView>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
কাস্টমপ্রেফারেন্সিসিটি.জভা তৈরি করুন
public class CustomPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addPreferencesFromResource(R.xml.settings);
//setup any other views that you have
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("View Added");
}
}
আপনার পছন্দ স্ক্রিনে ক্লিকযোগ্য বাটন যুক্ত করার জন্য নিম্নলিখিতটি একটি সহজ সমাধান। এটি সহজ করা হয়েছে কারণ পছন্দগুলি ইতিমধ্যে অ্যান্ড্রয়েডের মধ্যে স্থান সংরক্ষণ করে: উইজেটলআউট এবং বোতামটি অ্যান্ড্রয়েড: অনক্লিকের সাথে ক্লিকগুলি পাস করতে পারে।
প্রথমে সামগ্রীতে একটি বাটন.এক্সএমএল তৈরি করুন
<?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">
<Button
android:text="BUTTON"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:onClick="onButtonClick"/>
</LinearLayout>
এখন আপনার পছন্দসই। Xml এ, পছন্দটি যুক্ত করুন
<Preference
android:key="button"
android:title="Title"
android:summary="Summary"
android:widgetLayout="@layout/button" />
আপনার পছন্দঅ্যাক্টিভিটিতে এখন কেবলমাত্র অনটন বাটিক্লিক সদস্য থাকতে হবে
public class MainActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.main_preferences);
}
public void onButtonClick(View v) {
Log.d("Button", "Yeah, button was clicked");
}
}
preferences.xml:
<Preference
android:key="clearAllData"
android:title="@string/settings_clear_all_data">
</Preference>
SettingsFragment.java:
public class SettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
Preference clearAllData = (Preference) findPreference("clearAllData");
// setup buttons
final Context context = getActivity();
clearAllData.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
...
}
}
}
আমি PreferenceScreen
কাস্টম লেআউটের ভিতরে ধারকটি 'মোড়ানোর' জন্য তৈরি যে কোনও বিন্যাস (তারপরে নীচে একটি বোতাম যুক্ত করা ListView
) বাস্তবে কাজ করে নি সে হিসাবে উপরের সমস্ত উত্তর অ-ব্যবহারযোগ্য বলে খুঁজে পেয়েছি ।
তারা কেবল পছন্দ তালিকার শীর্ষে কাস্টম বিন্যাস (ভাসমান) ওভারলাইড করে এবং (যেমন) একটি নতুন কাস্টম বোতামটি কেবল বোতামের নীচে পছন্দকেই অনুরোধ করবে।
যাইহোক, আমি এই সমাধানটি ব্যবহার করেছি যখন পছন্দগুলি তালিকার নীচে একটি বোতাম যুক্ত করার জন্য ট্রিট কাজ করে PreferenceFragment
।