आप कर सकते हैं, जबकि उदाहरण के लिए दृश्य
बढ़ा-चढ़ाकर अगर आप कंटेनर के रूप में फ्रेम लेआउट का उपयोग कर रहे हैं टुकड़े तो नया उदाहरण विधि
साथ मान प्रदान करने के लिए वांछित चौड़ाई, ऊंचाई और मार्जिन खंड और कहा कि मान देना पारित
/**
*
* @param widthInDP
* @param heightinDP
* @param leftMarginDp
* @param topMarginDp
* @param rightMarginDp
* @param bottomMarginDp
* @param fragIndex
* @return
*/
public static PlaceholderFragment newInstance(int widthInDP,
int heightinDP, int leftMarginDp, int topMarginDp,
int rightMarginDp, int bottomMarginDp, int fragIndex) {
PlaceholderFragment resizableFragment = new PlaceholderFragment();
Bundle args = new Bundle();
// Test purpose Only
args.putInt(INDEX, fragIndex);
// Set Width Height dynamically
args.putInt(WIDTH, widthInDP);
args.putInt(HEIGHT, heightinDP);
// SetMargin
args.putInt(LEFT_MARGIN, leftMarginDp);
args.putInt(RIGHT_MARGIN, rightMarginDp);
args.putInt(TOP_MARGIN, topMarginDp);
args.putInt(BOTTOM_MARGIN, bottomMarginDp);
resizableFragment.setArguments(args);
return resizableFragment;
}
और फिर उन्हें onCreateView
विधि में लागू करें। यहां ध्यान दें कि यदि आप फ्रेम लेआउट का उपयोग टुकड़ों के लिए कंटेनर के रूप में कर रहे हैं तो FrameLayout
परम का उपयोग करें, अन्यथा आपको अपवाद मिलेगा।
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) rootView
.getLayoutParams();
// set width height
params.height = dpToPx(getArguments().getInt(HEIGHT));
params.width = dpToPx(getArguments().getInt(WIDTH));
// substitute
// parameters for left,top, right, bottom
params.setMargins(dpToPx(getArguments().getInt(LEFT_MARGIN)),
dpToPx(getArguments().getInt(TOP_MARGIN)),
dpToPx(getArguments().getInt(RIGHT_MARGIN)),
dpToPx(getArguments().getInt(BOTTOM_MARGIN)));
rootView.setLayoutParams(params);
आउटपुट: -
ऑरेंज पृष्ठभूमि मेरी Frame layout
कंटेनर है और अन्य सभी एक ही कंटेनर में कस्टम मार्जिन के साथ Fragments
बदला गया है। तुम भी उन्हें
पूरा कोड मैं नमूना में इस्तेमाल किया पर छोड़ दिया सही, ऊपर, नीचे, केंद्र, bottom- सेंटर, शीर्ष केंद्र और इतने जाना बनाने के लिए LayoutParam.Gravity
संपत्ति के साथ चारों ओर खेल सकते हैं
package com.example.fragment;
import android.annotation.TargetApi;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container,
PlaceholderFragment.newInstance(400, 400, 50, 50,
50, 50, 1)).commit();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container,
PlaceholderFragment.newInstance(300, 300, 30, 30,
30, 30, 2)).commit();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container,
PlaceholderFragment.newInstance(200, 200, 20, 20,
20, 20, 3)).commit();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.container,
PlaceholderFragment.newInstance(100, 100, 10, 10,
10, 10, 4)).commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static class PlaceholderFragment extends Fragment {
private static final String HEIGHT = "Height";
private static final String WIDTH = "Width";
private static final String LEFT_MARGIN = "left";
private static final String RIGHT_MARGIN = "right";
private static final String TOP_MARGIN = "top";
private static final String BOTTOM_MARGIN = "bottom";
// Test Data
private static final String INDEX = "FragNumber";
/**
*
* @param widthInDP
* @param heightinDP
* @param leftMarginDp
* @param topMarginDp
* @param rightMarginDp
* @param bottomMarginDp
* @param fragIndex
* @return
*/
public static PlaceholderFragment newInstance(int widthInDP,
int heightinDP, int leftMarginDp, int topMarginDp,
int rightMarginDp, int bottomMarginDp, int fragIndex) {
PlaceholderFragment resizableFragment = new PlaceholderFragment();
Bundle args = new Bundle();
// Test purpose Only
args.putInt(INDEX, fragIndex);
// Set Width Height dynamically
args.putInt(WIDTH, widthInDP);
args.putInt(HEIGHT, heightinDP);
// SetMargin
args.putInt(LEFT_MARGIN, leftMarginDp);
args.putInt(RIGHT_MARGIN, rightMarginDp);
args.putInt(TOP_MARGIN, topMarginDp);
args.putInt(BOTTOM_MARGIN, bottomMarginDp);
resizableFragment.setArguments(args);
return resizableFragment;
}
public PlaceholderFragment() {
}
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getActivity().getResources()
.getDisplayMetrics();
int px = Math.round(dp
* (displayMetrics.xdpi/DisplayMetrics.DENSITY_DEFAULT));
return px;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) rootView
.getLayoutParams();
// set width height
params.height = dpToPx(getArguments().getInt(HEIGHT));
params.width = dpToPx(getArguments().getInt(WIDTH));
// substitute
// parameters for left,top, right, bottom
params.setMargins(dpToPx(getArguments().getInt(LEFT_MARGIN)),
dpToPx(getArguments().getInt(TOP_MARGIN)),
dpToPx(getArguments().getInt(RIGHT_MARGIN)),
dpToPx(getArguments().getInt(BOTTOM_MARGIN)));
rootView.setLayoutParams(params);
// Test purpose Only
switch (getArguments().getInt(INDEX)) {
case 1:
rootView.setBackgroundColor(Color.MAGENTA);
((TextView) rootView.findViewById(R.id.frag_index))
.setText("Fragment # " + getArguments().getInt(INDEX));
break;
case 2:
rootView.setBackgroundColor(Color.GREEN);
((TextView) rootView.findViewById(R.id.frag_index))
.setText("Fragment # " + getArguments().getInt(INDEX));
break;
case 3:
rootView.setBackgroundColor(Color.BLUE);
((TextView) rootView.findViewById(R.id.frag_index))
.setText("Fragment # " + getArguments().getInt(INDEX));
break;
default:
rootView.setBackgroundColor(Color.WHITE);
((TextView) rootView.findViewById(R.id.frag_index))
.setText("Fragment # " + getArguments().getInt(INDEX));
break;
}
return rootView;
}
}
}
तो तकनीकी रूप से यह करने योग्य है लेकिन मुझे समझ में नहीं आया कि आप ऐसा करने का प्रयास क्यों कर रहे हैं?
मैंने अभी इस समाधान को मुद्रित किया है =) भूलें, लेआउट पैराम्स में आपके कंटेनर का प्रकार होना चाहिए। – Alexander
मान लीजिए कि मैं सही दिशा में इंगित कर रहा हूं। –
हां यह अच्छा समाधान है। लेकिन मैंने नए इंस्टेंस के बजाय बिल्डर का इस्तेमाल किया। – Alexander